다음을 통해 공유


WCF 확장에 대한 사용자 지정 메타데이터 가져오기

WCF(Windows Communication Foundation)에서 메타데이터 가져오기는 해당 메타데이터에서 서비스 또는 해당 구성 요소 부분의 추상적 표현을 생성하는 프로세스입니다. 예를 들면, WCF에서는 ServiceEndpoint 인스턴스, Binding 인스턴스 또는 ContractDescription 인스턴스를 서비스의 WSDL 문서에서 가져올 수 있습니다. WCF에서 서비스 메타데이터를 가져오려면 System.ServiceModel.Description.MetadataImporter 추상 클래스의 구현을 사용합니다. MetadataImporter 클래스에서 파생되는 형식은 WCF에서 WS-Policy 가져오기 논리를 사용하는 메타데이터 형식 가져오기에 대한 지원을 구현합니다.

사용자 지정 메타데이터는 시스템에서 제공한 메타데이터 가져오기에서 가져올 수 없는 XML 요소로 구성됩니다. 일반적으로 여기에 사용자 지정 WSDL 확장 및 사용자 지정 정책 어설션이 포함됩니다.

이 단원에서는 사용자 지정 WSDL 확장 및 정책 어설션을 가져오는 방법에 대해 설명합니다. 가져오기 프로세스 자체에 대해 중점적으로 설명하지는 않습니다. 메타데이터가 사용자 지정이든 시스템에서 지원하든 관계없이 메타데이터를 내보내고 가져오는 형식을 사용하는 방법에 대한 자세한 내용은 메타데이터 내보내기 및 가져오기를 참조하십시오.

개요

System.ServiceModel.Description.WsdlImporter 형식은 WCF에 포함된 MetadataImporter 추상 클래스의 구현입니다. WsdlImporter 형식은 System.ServiceModel.Description.MetadataSet 개체에 번들로 제공되는 연결된 정책과 함께 WSDL 메타데이터를 가져옵니다. 기본 가져오기가 인식하지 않는 정책 어설션 및 WSDL 확장은 가져올 등록된 사용자 지정 정책 및 WSDL 가져오기로 전달됩니다. 일반적으로 가져오기는 사용자 정의 바인딩 요소를 지원하거나 가져온 계약을 수정하도록 구현됩니다.

이 단원의 내용은 다음과 같습니다.

  1. 설명과 코드를 생성하기 전에 WSDL 데이터를 사용자 지정 가져오기에 노출하는 System.ServiceModel.Description.IWsdlImportExtension 인터페이스를 구현하고 사용하는 방법. 제공된 메타데이터 집합을 사용하면 수행된 설명 형식 및 코드 컴파일을 검사하거나 수정하는 데 이 인터페이스를 사용할 수 있습니다.
  2. 설명 개체를 생성하기 전에 정책 어설션을 가져오기에 노출하는 System.ServiceModel.Description.IPolicyImportExtension 인터페이스를 구현하고 사용하는 방법. 다운로드된 정책을 기반으로 바인딩 또는 계약을 검사하거나 수정하는 데 이 인터페이스를 사용할 수 있습니다.

사용자 지정 WSDL 및 정책 어설션 내보내기에 대한 자세한 내용은 WCF 확장에 대한 사용자 지정 메타데이터 내보내기를 참조하십시오.

사용자 지정 WSDL 확장 가져오기

WSDL 확장 가져오기에 대한 지원을 추가하려면 IWsdlImportExtension 인터페이스를 구현한 다음 구현 사항을 WsdlImportExtensions 속성에 추가합니다. WsdlImporter에서 응용 프로그램 구성 파일에 등록된 IWsdlImportExtension 인터페이스의 구현을 로드할 수도 있습니다. 기본적으로 여러 개의 WSDL 가져오기가 등록되며 등록된 WSDL 가져오기 순서가 중요합니다.

사용자 지정 WSDL 가져오기가 로드되고 WsdlImporter에서 사용되는 경우 가져오기 프로세스 이전에 메타데이터 수정이 가능하도록 BeforeImport 메서드가 먼저 호출됩니다. 그런 다음 메타데이터에서 가져온 계약 수정 사항을 사용할 수 있도록 ImportContract 메서드가 호출된 후에 계약을 가져옵니다. 마지막으로, 가져온 끝점의 수정 사항을 사용할 수 있도록 ImportEndpoint 메서드가 호출됩니다.

자세한 내용은 방법: 사용자 지정 WSDL 가져오기를 참조하십시오.

사용자 지정 정책 어설션 가져오기

WsdlImporter 형식 및 ServiceModel Metadata Utility Tool (Svcutil.exe)는 WSDL 문서에 연결된 정책 식의 여러 가지 정책 어설션 형식을 자동으로 처리합니다. 이러한 도구는 WSDL 바인딩 및 WSDL 포트에 연결된 정책 식을 수집, 정규화 및 병합합니다.

사용자 지정 정책 어설션 가져오기에 대한 지원을 추가하려면 IPolicyImportExtension 인터페이스를 구현한 다음 구현 사항을 PolicyImportExtensions 속성에 추가합니다. MetadataImporter에서 응용 프로그램 구성 파일에 등록된 IPolicyImportExtension 인터페이스의 구현을 로드할 수도 있습니다. 기본적으로 여러 개의 정책 가져오기가 등록되며 등록된 정책 가져오기 순서가 중요합니다.

메타데이터 시스템은 메시지, 작업 및 끝점 정책 주제에 연결된 정책 대안의 각 조합에 대해 등록된 모든 정책 가져오기 확장에서 System.ServiceModel.Description.IPolicyImportExtension.ImportPolicy(System.ServiceModel.Description.MetadataImporter,System.ServiceModel.Description.PolicyConversionContext) 메서드를 반복해서 호출합니다. WSDL 포트를 가져올 때 해당 포트 및 해당 WSDL 바인딩에 연결된 정책은 정책 가져오기 확장을 호출하기 전에 병합됩니다. 정책 대안은 PolicyConversionContext를 통해 PolicyAssertionCollection 개체로 사용할 수 있습니다. 각 PolicyAssertionCollectionXmlElement 개체로 나타낸 정책 어설션의 컬렉션입니다.

PolicyConversionContext 개체의 ContractBindingElements 속성은 WSDL에서 가져온 ContractDescriptionBindingElement 개체를 노출합니다. 정책 가져오기 확장은 특정 정책 어설션 형식의 인스턴스를 찾고, ContractDescription 또는 BindingElement 개체를 변경한 다음 해당 PolicyAssertionCollection 인스턴스에서 정책 어설션을 제거하여 정책 어설션을 처리합니다.

wsp:Optional 특성 및 중첩된 정책 식이 정규화되지 않으므로 정책 가져오기 확장이 이러한 정책 구성을 처리해야 합니다. 또한 같은 ContractDescriptionBindingElement 개체를 사용하여 정책 가져오기 확장을 여러 번 호출할 수 있으므로 정책 가져오기 확장은 이 동작을 보호할 수 있을 정도로 강력해야 합니다.

참고

잘못되었거나 부적절한 메타데이터를 가져오기로 전달할 수 없습니다. 사용자 지정 가져오기가 모든 형태의 XML을 보호할 수 있을 정도로 강력해야 합니다.

참고 항목

작업

방법: 사용자 지정 WSDL 가져오기
방법: 사용자 지정 정책 어설션 가져오기
방법: ServiceContractGenerator에 대한 확장 쓰기