다음을 통해 공유


ServiceDescription 및 WSDL 참조

이 항목에서는 WCF(Windows Communication Foundation)가 WSDL(웹 서비스 기술 언어) 문서를 ServiceDescription 인스턴스와 매핑하는 방법을 설명합니다.

ServiceDescription에서 WSDL 1.1에 매핑하는 방법

WCF를 사용하여 서비스의 ServiceDescription 인스턴스에서 WSDL 문서를 내보낼 수 있습니다. WSDL 문서는 메타데이터 엔드포인트를 게시할 때 서비스에 대해 자동으로 생성됩니다.

ServiceEndpoint 형식을 사용하여 WSDL 문서에서 ContractDescription, BindingWsdlImporter 인스턴스를 가져올 수도 있습니다.

WCF에서 내보낸 WSDL 문서는 외부 XML 스키마 문서에서 사용된 XML 스키마 정의를 가져옵니다. 서비스에서 데이터 형식에 사용되는 대상 네임스페이스마다 별도의 XML 스키마 문서를 내보냅니다. 마찬가지로 서비스 계약에 사용되는 대상 네임스페이스마다 별도의 WSDL 문서를 내보냅니다.

ServiceDescription

ServiceDescription 인스턴스는 wsdl:service 요소에 매핑됩니다. ServiceDescription 인스턴스에는 각각 개별 ServiceEndpoint 요소에 매핑되는 wsdl:port 인스턴스의 컬렉션이 포함되어 있습니다.

속성 WSDL 매핑
Name 서비스에 대한 wsdl:service/@name 값입니다.
Namespace 서비스의 wsdl:service 정의에 대한 targetNamespace입니다.
Endpoints 서비스에 대한 wsdl:port 정의입니다.

ServiceEndpoint

ServiceEndpoint 인스턴스는 wsdl:port 요소에 매핑됩니다. ServiceEndpoint 인스턴스에는 주소, 바인딩 및 계약이 포함되어 있습니다.

ph x="1" /> 인터페이스를 구현하는 엔드포인트 동작은 연결되는 엔드포인트에 대한 wsdl:port 요소를 수정할 수 있습니다.

속성 WSDL 매핑
Name 엔드포인트에 대한 wsdl:port/@name 값 및 엔드포인트 바인딩에 대한 wsdl:binding/@name 값입니다.
Address 엔드포인트의 wsdl:port 정의에 대한 주소입니다.

엔드포인트에 대한 전송에 따라 주소 형식이 결정됩니다. 예를 들어 WCF 지원 전송의 경우 SOAP 주소 또는 엔드포인트 참조가 될 수 있습니다.
Binding 엔드포인트에 대한 wsdl:binding 정의입니다.

wsdl:binding 정의와 달리 WCF의 바인딩은 하나의 계약에 연결되지 않습니다.
Contract 엔드포인트에 대한 wsdl:portType 정의입니다.
Behaviors ph x="1" /> 인터페이스를 구현하는 엔드포인트 동작은 엔드포인트에 대한 wsdl:port를 수정할 수 있습니다.

바인딩

ServiceEndpoint 인스턴스에 대한 바인딩 인스턴스가 wsdl:binding 정의에 매핑됩니다. 특정 wsdl:binding 정의와 연결되어야 하는 wsdl:portType 정의와 달리 WCF 바인딩은 계약에 독립적입니다.

바인딩은 바인딩 요소의 컬렉션으로 구성됩니다. 각 요소는 엔드포인트가 클라이언트와 통신하는 방법의 일부를 설명합니다. 또한 바인딩에는 엔드포인트에 대한 MessageVersionEnvelopeVersion을 나타내는 AddressingVersion이 있습니다.

속성 WSDL 매핑
Name 엔드포인트에 대한 기본 이름에 사용되며, 계약 이름을 밑줄로 구분하여 연결한 바인딩 이름입니다.
Namespace targetNamespace 정의에 대한 wsdl:binding입니다.

가져오기에서는 정책이 WSDL 포트에 연결되어 있으면 가져온 바인딩 네임스페이스가 targetNamespace 정의에 대한 wsdl:port에 매핑됩니다.
BindingElementCollection() 메서드에 의해 반환되는 CreateBindingElements wsdl:binding 정의에 대한 다양한 도메인별 확장명(일반적으로 정책 어설션)입니다.
MessageVersion 엔드포인트에 대한 EnvelopeVersionAddressingVersion입니다.

MessageVersion.None이 지정된 경우 WSDL 바인딩은 SOAP 바인딩을 포함하지 않고 WSDL 포트는 WS-Addressing 콘텐츠를 포함하지 않습니다. 이 설정은 일반적으로 POX(Plain Old XML) 엔드포인트에 사용됩니다.

BindingElements

엔드포인트 바인딩에 대한 바인딩 요소는 정책 어설션과 같은 wsdl:binding의 다양한 WSDL 확장에 매핑됩니다.

바인딩에 대한 TransportBindingElement에 따라 SOAP 바인딩에 대한 전송 URI(Uniform Resource Identifier)가 결정됩니다.

AddressingVersion

바인딩의 AddressingVersionwsd:port에 사용되는 주소 지정 버전에 매핑됩니다. WCF는 SOAP 1.1 및 SOAP 1.2 주소와 WS-Addressing 08/2004 및 WS-Addressing 1.0 엔드포인트 참조를 지원합니다.

EnvelopeVersion

바인딩의 EnvelopeVersionwsdl:binding에 사용되는 SOAP 버전에 매핑됩니다. WCF는 SOAP 1.1 및 SOAP 1.2 바인딩을 지원합니다.

계약

ContractDescription 인스턴스에 대한 ServiceEndpoint 인스턴스가 wsdl:portType에 매핑됩니다. ContractDescription 인스턴스는 지정된 계약에 대한 모든 작업을 설명합니다.

속성 WSDL 매핑
Name 계약에 대한 wsdl:portType/@name 값입니다.
Namespace wsdl:portType 정의에 대한 targetNamespace입니다.
SessionMode 계약에 대한 wsdl:portType/@msc:usingSession 값입니다. 이 특성은 WSDL 1.1용 WCF 확장입니다.
Operations 계약에 대한 wsdl:operation 정의입니다.

작업

OperationDescription 인스턴스는 wsdl:portType/wsdl:operation에 매핑됩니다. OperationDescription에는 작업에 대한 메시지를 설명하는 MessageDescription 인스턴스 컬렉션이 포함되어 있습니다.

OperationDescription이 WSDL 문서에 매핑되는 방법에 주로 관여하는 작업 동작은 DataContractSerializerOperationBehaviorXmlSerializerOperationBehavior입니다.

속성 WSDL 매핑
Name 작업에 대한 wsdl:portType/wsdl:operation/@name 값입니다.
ProtectionLevel 이 작업의 wsdl:binding/wsdl:operation 메시지에 연결된 보안 정책의 보호 어설션입니다.
IsInitiating 작업에 대한 wsdl:portType/wsdl:operation/@msc:isInitiating 값입니다. 이 특성은 WSDL 1.1용 WCF 확장입니다.
IsTerminating 작업에 대한 wsdl:portType/wsdl:operation/@msc:isTerminating 값입니다. 이 특성은 WSDL 1.1용 WCF 확장입니다.
Messages 작업에 대한 wsdl:portType/wsdl:operation/wsdl:inputwsdl:portType/wsdl:operation/wsdl:output 메시지입니다.
Faults 작업에 대한 wsdl:portType/wsdl:operation/wsdl:fault 정의입니다.
Behaviors DataContractSerializerOperationBehaviorXmlSerializerOperationBehavior는 작업 바인딩과 작업 메시지를 처리합니다.

DataContractSerializerOperationBehavior

작업에 대한 DataContractSerializerOperationBehavior는 해당 작업에 대한 WSDL 메시지 및 바인딩을 내보내는 IWsdlExportExtension 구현입니다. XML 스키마 형식은 XsdDataContractExporter를 사용하여 내보냅니다. 또한 DataContractSerializerOperationBehavior는 해당 작업에 대한 용도, 스타일, 스키마 내보내기 및 가져오기를 결정합니다.

속성 WSDL 매핑
DataContractFormatAttribute 이 특성에 대한 Style 속성은 작업의 wsdl:binding/wsdl:operation/soap:operation/@style 값에 매핑됩니다.

DataContractSerializerOperationBehavior는 WSDL에서 스키마 형식의 리터럴 사용만 지원합니다.

XmlSerializerOperationBehavior

작업에 대한 XmlSerializerOperationBehavior는 해당 작업에 대한 WSDL 메시지 및 바인딩을 내보내는 IWsdlExportExtension 구현입니다. XML 스키마 형식은 XmlSchemaExporter를 사용하여 내보냅니다. 또한 XmlSerializerOperationBehavior는 해당 작업에 대한 용도, 스타일, 스키마 내보내기 및 가져오기를 결정합니다.

속성 WSDL 매핑
XmlSerializerFormatAttribute 이 특성에 대한 Style 속성은 작업의 wsdl:binding/wsdl:operation/soap:operation/@style 값에 매핑됩니다.

이 특성의 Use 속성은 이 작업의 모든 메시지에 대한 wsdl:binding/wsdl:operation/soap:operation/*/@use 값에 매핑됩니다.

메시지

MessageDescription 인스턴스는 작업에서 wsdl:portType/wsdl:operation/wsdl:input 또는 wsdl:portType/wsdl:operation/wsdl:output 메시지가 참조하는 wsdl:message에 매핑됩니다. MessageDescription에는 본문과 헤더가 있습니다.

속성 WSDL 매핑
Action 작업에 대한 SOAP 또는 WS-Addressing 동작입니다.

"*" 동작 문자열을 사용하는 작업은 WSDL에 표시되지 않습니다.
Direction MessageDirection.Inputwsdl:input에 매핑됩니다.

MessageDirection.Outputwsdl:output에 매핑됩니다.
ProtectionLevel 이 메시지의 wsdl:message 정의에 연결되는 보안 정책의 보호 어설션입니다.
Body 메시지의 메시지 본문입니다.
Headers 메시지의 헤더입니다.
ContractDescription.Name, OperationContract.Name 내보내기에서 wsdl:message/@name 값을 파생시키는 데 사용됩니다.

메시지 본문

MessageBodyDescription 인스턴스는 메시지의 본문에 대한 wsdl:message/wsdl:part 정의에 매핑됩니다. 메시지 본문은 wrapped 또는 bare입니다.

속성 WSDL 매핑
WrapperName 스타일이 RPC가 아닌 경우 WrapperName은 @name이 "매개 변수"로 설정된 wsdl:message/wsdl:part에서 참조하는 요소 이름에 매핑됩니다.
WrapperNamespace 스타일이 RPC가 아닌 경우 WrapperNamespace는 @name이 "매개 변수"로 설정된 wsdl:message/wsdl:part의 요소 네임스페이스에 매핑됩니다.
Parts 이 메시지 본문의 메시지 부분입니다.
ReturnValue 래퍼 요소가 있으면 래퍼 요소의 자식 요소이고(문서 래핑 스타일 또는 RPC 스타일), 그렇지 않으면 메시지의 첫 번째 wsdl:message/wsdl:part입니다.

메시지 부분

MessagePartDescription 인스턴스는 메시지 부분이 가리키는 XML 스키마 형식 또는 요소 및 wsdl:message/wsdl:part에 매핑됩니다.

속성 WSDL 매핑
Name 메시지 부분의 wsd:message/wsdl:part/@name 값과 메시지 부분이 가리키는 요소의 이름입니다.
Namespace 메시지 부분이 가리키는 요소의 네임스페이스입니다.
Index 메시지에 대한 wsdl:message/wsdl:part의 인덱스입니다.
ProtectionLevel 이 메시지 부분의 wsdl:message 정의에 연결되는 보안 정책의 보호 어설션입니다. 정책은 특정 메시지 부분을 가리키는 매개 변수를 가집니다.
MessageType 메시지 부분이 가리키는 요소의 XML 스키마 형식입니다.

메시지 헤더

MessageHeaderDescription 인스턴스는 메시지 부분에 대한 soap:header 바인딩에도 매핑되는 메시지 부분입니다.

오류

FaultDescription 인스턴스는 wsdl:portType/wsdl:operation/wsdl:fault 정의와 관련 wsdl:message 정의에 매핑됩니다. wsdl:message는 연결된 WSDL 포트 형식과 동일한 대상 네임스페이스에 추가됩니다. wsdl:message에는 DefaultType 인스턴스의 FaultDescription 속성 값에 해당하는 XML 스키마 요소를 가리키는 "detail"이라는 단일 메시지 부분이 있습니다.

속성 WSDL 매핑
Name 오류에 대한 wsdl:portType/wsdl:operation/wsdl:fault/@name 값입니다.
Namespace 오류 정보 메시지 부분이 가리키는 XML 스키마 요소의 네임스페이스입니다.
Action 오류에 대한 SOAP 또는 WS-Addressing 동작입니다.
ProtectionLevel 이 오류의 wsdl:message 정의에 연결되는 보안 정책의 보호 어설션입니다.
DetailType 세부 메시지 부분이 가리키는 요소의 XML 스키마 형식입니다.
Name, ContractDescription.Name, OperationDescription.Name, 오류 메시지의 wsdl:message/@name 값을 파생시키는 데 사용됩니다.

참고 항목