XML Web services 프록시 만들기

이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.

정의에 따르면 웹 서비스는 SOAP와 같은 산업 표준 프로토콜을 사용하여 네트워크를 통해 통신할 수 있습니다. 즉, 클라이언트와 웹 서비스가 입력 및 출력 매개 변수를 XML로 캡슐화한 SOAP 메시지를 사용하여 통신합니다. 웹 서비스 클라이언트에서는 프록시 클래스가 매개 변수를 XML 요소에 매핑한 다음 네트워크를 통해 SOAP 메시지를 보내는 작업을 처리합니다.

서비스 설명이 있을 경우 이 설명이 WSDL(Web Services Description Language)을 준수하면 프록시 클래스가 생성될 수 있습니다. 서비스 설명은 웹 서비스와 통신하는 방법을 정의합니다. 이러한 서비스 설명을 사용하여 Wsdl.exe 도구에서 프록시 클래스를 만들 수 있습니다. 그러면 웹 서비스 클라이언트에서 프록시 클래스의 메서드를 호출할 수 있으며 이를 통해 웹 서비스에서 보내거나 받은 SOAP 메시지를 처리하여 네트워크를 통해 웹 서비스와 통신할 수 있습니다. 프록시 클래스는 인터넷을 통해 웹 서비스와 통신하기 때문에 프록시 클래스의 Url 속성이 신뢰할 수 있는 대상을 참조하는지 확인하는 것이 좋습니다.

기본적으로 프록시 클래스는 HTTP를 통한 SOAP를 사용하여 웹 서비스와 통신합니다. Wsdl.exe는 HTTP-GET 프로토콜 또는 HTTP-POST 프로토콜을 사용하여 웹 서비스와 통신하는 프록시 클래스를 생성할 수 있습니다. 프록시 클래스에서 HTTP-GET 또는 HTTP-POST를 사용하도록 지정하려면 아래 표에 설명된 것처럼 Wsdl.exe 도구에 /protocol 스위치를 제공합니다.

Wsdl.exe를 사용하여 XML Web Services 프록시 클래스 생성

명령 프롬프트에서 웹 서비스 기술 언어 도구(Wsdl.exe)를 사용하여 프록시 클래스를 만들 수 있습니다. 이때 최소한 서비스 설명 또는 웹 서비스에 대한 URL을 지정하거나 저장된 서비스 설명에 대한 경로를 지정해야 합니다.

Wsdl /language:language /protocol:protocol /namespace:myNameSpace /out:filename /username:username /password:password /domain:domain <url or path>
d2s8y7bs.note(ko-kr,VS.100).gif참고:
여기에 나열된 인수는 Wsdl.exe에 일반적으로 사용되는 인수입니다. Wsdl.exe의 전체 구문은 웹 서비스 기술 언어 도구(Wsdl.exe)를 참조하십시오.

매개 변수

<url 또는 경로>

서비스 설명에 대한 URL 또는 경로(웹 서비스 기술 언어로 웹 서비스를 설명하는 파일)

파일을 지정할 경우 서비스 설명을 포함하는 파일을 지정합니다. 예를 들면 다음과 같습니다.

mywebservice.wsdl

URL을 지정할 경우 URL이 .asmx 페이지를 참조하거나 서비스 설명을 반환해야 합니다. ASP.NET을 사용하여 만든 웹 서비스의 경우 웹 서비스의 URL에 ?WSDL을 추가하여 서비스 설명을 반환할 수 있습니다. 예를 들면 다음과 같습니다.

https://www.contoso.com/MyWebService.asmx?WSDL

/language:language

프록시 클래스를 생성하는 데 사용되는 언어입니다. 사용 가능한 옵션으로는 CS, VB 및 JS가 있으며 이는 각각 C#, Visual Basic .NET 및 JScript .NET을 나타냅니다. 기본 언어는 C#입니다. 이 매개 변수는 선택 사항입니다.

/protocol:protocol

웹 서비스 메서드와 통신하는 데 사용되는 프로토콜입니다. 사용 가능한 옵션으로는 SOAP, HTTP-GET 및 HTTP-POST가 있습니다. 기본 프로토콜은 SOAP입니다. 이 매개 변수는 선택 사항입니다.

/namespace:myNameSpace

생성된 프록시의 네임스페이스입니다. 기본값은 전역 네임스페이스입니다. 이 매개 변수는 선택 사항입니다.

/out:filename

프록시 클래스를 포함하여 만들 파일의 이름입니다. 기본 이름은 웹 서비스를 구현하는 클래스의 이름을 기반으로 합니다. 이 매개 변수는 선택 사항입니다.

/username:username

인증이 필요한 웹 서버에 연결할 때 사용할 사용자 이름입니다. 이 매개 변수는 선택 사항입니다.

/password:password

인증이 필요한 웹 서버에 연결할 때 사용할 암호입니다. 이 매개 변수는 선택 사항입니다.

/domain:domain

인증이 필요한 웹 서버에 연결할 때 사용할 도메인입니다. 이 매개 변수는 선택 사항입니다.

생성된 프록시 클래스 정보

Wsdl.exe를 사용하여 프록시 클래스를 생성할 경우 하나의 소스 파일이 지정된 언어로 생성됩니다. 이 파일에는 웹 서비스의 각 웹 서비스 메서드에 대해 동기 메서드와 비동기 메서드를 모두 공개하는 프록시 클래스가 포함됩니다. 예를 들어, 웹 서비스에 Add라는 웹 서비스 메서드가 포함되는 경우 프록시 클래스에 Add 웹 서비스 메서드를 호출하는 Add, BeginAdd** 및 EndAdd 메서드가 있습니다. 프록시 클래스의 Add 메서드는 Add 웹 서비스 메서드와 동기적으로 통신하는 데 사용되고, BeginAddEndAdd 메서드는 웹 서비스 메서드와 비동기적으로 통신하는 데 사용됩니다. 웹 서비스 메서드와 비동기적으로 통신하는 방법에 대한 자세한 내용은 XML Web Services와 비동기적으로 통신을 참조하십시오.

생성된 프록시 클래스의 각 메서드에는 웹 서비스 메서드와 통신하는 데 적합한 코드가 들어 있습니다. 웹 서비스 및 프록시 클래스와 통신하는 중에 오류가 발생하면 예외가 throw됩니다. 오류 처리에 대한 자세한 내용은 XML Web Services에서 예외 처리 및 throw를 참조하십시오.

매개 변수 순서는 웹 서비스 메서드 및 연결된 프록시 클래스 메서드에 정의된 순서 간에 다를 수 있습니다. 대부분의 경우 매개 변수 순서가 일치하지만 웹 서비스에서 Document 형식의 SOAP 메시지를 예상하는 경우 매개 변수의 순서가 일치하지 않을 수 있습니다. 웹 서비스 메서드에서 입력 매개 변수 앞에 출력 매개 변수가 정의되어 있으면 출력 매개 변수가 프록시 클래스의 모든 입력 매개 변수 뒤에 배치됩니다. 예를 들어, 다음 코드 예제에서 MyWebMethod 웹 서비스 메서드에는 출력 매개 변수 outStr이 입력 매개 변수 inStr 앞에 선언되어 있습니다. 그러나 프록시 클래스에서는 inStr 매개 변수가 outStr보다 먼저 선언됩니다.

' Declare MyWebMethod in the Web service.
MyWebMethod(ByRef outStr As String, inStr As String)

' This is the corresponding MyWebMethod in the proxy class.
MyWebMethod(inStr As String, ByRef outStr As String)
// Declare MyWebMethod in the Web service.
MyWebMethod(out string outStr, string inStr)

// This is the corresponding MyWebMethod in the proxy class.
MyWebMethod(string inStr, out string outStr).

경우에 따라 Wsdl.exe에서 생성한 프록시 클래스가 최소 공분모 접근법을 사용하여 서비스 설명에 지정된 형식에 개체를 캐스팅할 수 있습니다. 따라서 프록시 클래스에 생성된 형식이 개발자가 원하거나 예상하는 형식이 아닐 수 있습니다. 예를 들어, Wsdl.exe는 서비스 설명에 ArrayList 형식이 있으면 생성된 프록시 클래스에 Object 배열을 만듭니다. 정확한 개체 형식이 캐스팅되도록 하려면 생성된 프록시 클래스가 포함된 파일을 열어서 잘못된 개체 형식을 원하는 개체 형식으로 변경해야 합니다.

Wsdl.exe에서 경고 throw

Wsdl.exe에 서비스 설명을 여러 개 입력하면 다음과 같은 두 가지 오류 메시지가 표시될 수 있습니다.

  • 경고: <schema URI> 위치에서 TargetNamespace=<schema namespace>인 중복 서비스 설명을 무시합니다.

    두 개 이상의 제공된 서비스 설명에 대한 TargetNamespace가 동일함을 나타냅니다. TargetNamespace는 특정 XML 문서의 고유한 식별자(이 경우 서비스 설명)이므로 Wsdl.exe는 두 서비스 설명을 동일한 것으로 간주합니다. 따라서 Wsdl.exe는 서비스 설명 중 하나에 대해서만 프록시를 작성합니다. 하지만 이것이 원하는 결과가 아니라면 변경할 수 있습니다. ASP.NET을 사용하여 만든 웹 서비스를 나타내는 서비스 설명인 경우, 고유한 Namespace 속성을 지정하는 WebService 특성을 웹 서비스를 구현하는 클래스에 적용할 수 있습니다. 그러면 이 Namespace 속성은 서비스 설명에서 TargetNamespace로 사용되어 웹 서비스를 고유하게 식별합니다.

  • 경고: <schema URI> 위치에서 TargetNamespace=<schema Namespace>인 중복 스키마를 무시합니다.

    제공된 서비스 설명에서 두 개 이상의 XML 스키마에 대한 TargetNamespace가 동일함을 나타냅니다. TargetNamespace는 특정 XML 문서의 고유한 식별자(이 경우 XML 스키마)이므로 Wsdl.exe는 두 XML 스키마를 동일한 것으로 간주합니다. 따라서 Wsdl.exe는 스키마 중 하나에 대해서만 클래스를 작성합니다. 하지만 이것이 원하는 결과가 아니라면 각 XML 스키마에 대한 TargetNamespace를 고유한 URI로 변경해야 합니다. TargetNamespace를 수정하는 방법은 특정 XML 스키마의 출처에 따라 다릅니다.

참고 항목

작업

방법: ASP.NET을 사용하여 만든 기존 XML Web services 탐색
방법: 브라우저에서 XML Web services 액세스

개념

XML Web services 클라이언트 빌드
웹 서비스 검색
XML Web services와 비동기적으로 통신

기타 리소스

XML Web services에 대한 클라이언트 만들기