XML Web services 프록시 만들기
정의에 따르면 웹 서비스는 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 Service 프록시 클래스 생성
명령 프롬프트에서 웹 서비스 기술 언어 도구(Wsdl.exe)를 사용하여 프록시 클래스를 만들 수 있습니다. 이때 최소한 서비스 설명 또는 웹 서비스에 대한 URL을 지정하거나 저장된 서비스 설명에 대한 경로를 지정해야 합니다.
Wsdl /language:language /protocol:protocol /namespace:myNameSpace /out:filename /username:username /password:password /domain:domain <url or path>
참고: |
---|
여기에 나열된 인수는 Wsdl.exe에 일반적으로 사용되는 인수입니다. Wsdl.exe의 전체 구문은 웹 서비스 기술 언어 도구(Wsdl.exe)를 참조하십시오. |
매개 변수 | 값 |
---|---|
<url 또는 경로> |
서비스 설명에 대한 URL 또는 경로(WSDL(Web Services Description Language)로 웹 서비스를 설명하는 파일) 파일을 지정할 경우 서비스 설명을 포함하는 파일을 지정합니다. 예를 들면 다음과 같습니다. 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 웹 서비스 메서드와 동기적으로 통신하는 데 사용되고, BeginAdd
및 EndAdd
메서드는 웹 서비스 메서드와 비동기적으로 통신하는 데 사용됩니다. 웹 서비스 메서드와 비동기적으로 통신하는 방법에 대한 자세한 내용은 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에 대한 클라이언트 만들기
Copyright © 2007 by Microsoft Corporation. All rights reserved.