다음을 통해 공유


InfoPath, RPC 인코딩 및 웹 서비스

웹 서비스는 Document 또는 RPC라는 두 가지 스타일 중 하나를 노출하여 해당 스타일을 설명하는 WSDL(웹 서비스 기술 언어) 계약의 해당 웹 메서드에 바인딩할 수 있습니다. 또한 이러한 두 가지 바인딩 스타일은 각각 literal 또는 encoded로 지정할 수 있습니다. 각 형식의 가장 일반적인 구현 방식은 document/literal 및 RPC/encoded입니다. 그러나 Microsoft InfoPath 2010에서는 document/literal 스타일을 사용하는 웹 서비스에 대한 연결만 지원합니다.

대부분의 웹 서비스 개발 도구는 만들려는 웹 서비스의 종류를 지정할 수 있는 스위치를 제공합니다. InfoPath 2010에서 연결할 웹 서비스를 개발하는 경우 웹 서비스의 스타일 및 인코딩으로 document/literal을 지정해야 합니다.

그러나 사용하려는 웹 서비스에 대한 제어 권한이 없고 RPC/encoded 스타일을 사용하는 웹 서비스에 연결해야 하는 경우에는 .NET 프록시 서비스를 사용하여 RPC/encoded 웹 서비스에 연결할 수 있습니다.

.NET 프록시 서비스를 사용하여 웹 서비스에 연결

사용하려는 RPC/encoded 웹 서비스에 대한 제어 권한이 없는 경우 RPC/encoded 웹 서비스에서 호출하려는 각 웹 메서드에 대한 래퍼 기능을 제공하는 document/literal 프록시 Microsoft .NET 웹 서비스를 만들 수 있습니다. 그러면 InfoPath에서 프록시 document/literal 웹 서비스를 사용할 수 있습니다.

.NET Framework 코드는 모든 종류의 웹 서비스(RPC/encoded 및 document/literal)와 함께 사용할 수 있으며 모든 .NET 웹 서비스는 document/literal 스타일 및 인코딩을 사용합니다. .NET Framework는 모든 종류의 웹 서비스와 통신할 수 있으므로 RPC/encoded 웹 서비스를 호출하는 메서드가 포함된 .NET 웹 서비스를 만들 수 있습니다. .NET 웹 서비스는 InfoPath에서 .NET 웹 서비스에 대한 document/literal 스타일 호출을 수행하여 다시 원래 웹 서비스에 대한 RPC/encoded 스타일 호출을 수행할 수 있도록 해 주는 변환기의 역할을 합니다.

이러한 프록시 Microsoft .NET 웹 서비스를 만드는 데 필요한 필수 구성 요소는 프록시 웹 서비스를 배포할, ASP.NET이 설치된 IIS(인터넷 정보 서비스)를 실행하는 Microsoft Windows 또는 Microsoft Windows Server 컴퓨터입니다. InfoPath 솔루션을 만들면 RPC/encoded 웹 서비스 대신에 프록시 웹 서비스를 가리킵니다. 그러면 프록시 웹 서비스가 RPC/encoded 서비스를 호출합니다.

Visual Studio를 사용하여 프록시 웹 서비스 만들기

  1. ASP.NET 웹 서비스 응용 프로그램 프로젝트를 만듭니다.

  2. 솔루션 탐색기에서 새 프로젝트의 참조 폴더를 마우스 오른쪽 단추로 클릭하고 웹 참조 추가를 클릭합니다.

  3. 웹 참조 추가 대화 상자에서 사용하려는 RPC/encoded 웹 서비스의 URL을 입력한 다음 이동을 클릭합니다.

  4. 참조 추가를 클릭합니다.

  5. 웹 서비스의 .asmx 파일을 열고 참조된 RPC/encoded 웹 서비스에서 각 웹 서비스 메서드를 호출할 웹 서비스 메서드를 하나 추가합니다.

  6. 참조 RPC/encoded 웹 서버의 메서드 목록을 보려면 클래스 뷰 창을 표시합니다. 각 웹 서비스 메서드에 대해 3가지 메서드가 표시됩니다. 예를 들어 웹 서비스 메서드의 이름이 doSearch인 경우 doSearch, BegindoSearch, EnddoSearch의 3가지 메서드가 표시됩니다. doSearch 메서드에 대한 래퍼 웹 서비스 메서드만 만들면 됩니다. 메서드 서명과 반환 형식이 정확히 일치하는지 확인하십시오.

  7. 각 래퍼 메서드 내에서 다음 예와 같이 참조된 RPC/encoded 웹 서비스를 호출하는 코드를 작성해야 합니다.

    [WebMethod] 
    public string[] doSearch(string keyword) 
    { 
       SearchService srch = new SearchService(); 
       return srch.doSearch(keyword); 
    } 
    
  8. RPC/encoded 웹 서비스에 인증이 필요한 경우 RPC/encoded 웹 서비스에 연결하는 데 필요한 자격 증명을 프록시 .NET 웹 서비스의 원본 코드에 하드 코드로 작성하거나 다음 예와 같이 코드를 사용할 수 있습니다.

    myProxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 
    

    자세한 내용은 https://support.microsoft.com/에서 Microsoft 기술 자료 문서 "방법: ASP.NET 웹 서비스에 현재 자격 증명 전달"을 참조하십시오.

Visual Studio .NET을 사용하지 않고 프록시 웹 서비스 만들기

또는 MSDN에서 다운로드할 수 있는 .NET Framework SDK(소프트웨어 개발 키트)에서 제공되는 도구를 사용하여 프록시 웹 서비스를 만들 수도 있습니다.

웹 서비스 기술 언어 도구(Wsdl.exe)를 사용하여 프록시 웹 서비스용 코드 파일을 만듭니다. 이 코드 파일은 역시 .NET Framework SDK에 포함되어 있는 C# 명령줄 컴파일러(csc.exe) 또는 Visual Basic .NET 명령줄 컴파일러(vbc.exe)를 사용하여 컴파일할 수 있습니다. 웹 서비스 기술 언어 도구에서 코드 파일을 생성한 후 파일 이름 확장명을 .asmx로 바꾸고 텍스트 편집기에서 파일을 엽니다. 문서의 첫 번째 줄에 다음과 같은 페이지 지시문을 추가합니다.

<%@ WebService Language="C#" class="GoogleSearchServiceWrapper" %> 

코드 파일의 끝 부분으로 이동하여 RPC/encoded 웹 서비스의 각 웹 서비스 메서드에 대한 호출을 만듭니다. 다음 코드 예제는 RPC/encoded 개발 스타일을 사용하는 Google 웹 서비스로 연결되는 .NET 웹 서비스용 코드를 보여 줍니다. wsdl.exe를 통해 생성된 코드가 삽입될 위치에 대한 자리 표시자가 있습니다.

<%@ WebService Language="C#" class="GoogleSearchServiceWrapper" %> 
 
using System; 
using System.Web.Services; 
 
// The auto-generated code from the wsdl.exe tool goes here. 
 
[WebService] 
public class GoogleSearchServiceWrapper : System.Web.Services.WebService  
{ 
    [WebMethod] 
    public System.Byte[] doGetCachedPage(System.String key, System.String url) 
    { 
        GoogleSearchService srch = new GoogleSearchService(); 
        return srch.doGetCachedPage(key, url); 
    } 
 
    [WebMethod] 
    public System.String doSpellingSuggestion(System.String key, System.String phrase) 
    { 
        GoogleSearchService srch = new GoogleSearchService(); 
        return srch.doSpellingSuggestion(key, phrase); 
    } 
 
    [WebMethod] 
    public GoogleSearchResult doGoogleSearch(System.String key, 
      System.String q, 
      System.Int32 start, 
      System.Int32 maxResults, 
      System.Boolean filter, 
      System.String restrict, 
      System.Boolean safeSearch, 
      System.String lr, 
      System.String ie, 
      System.String oe) 
    {
        GoogleSearchService srch = new GoogleSearchService();
           return srch.doGoogleSearch(key, q, start, maxResults, 
               filter, restrict, safeSearch, lr, ie, oe); 
    } 
}