내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

IPolicyImportExtension 인터페이스

바인딩에 대한 사용자 지정 정책 어설션을 가져오는 개체의 메서드를 정의합니다.

네임스페이스:  System.ServiceModel.Description
어셈블리:  System.ServiceModel(System.ServiceModel.dll)

public interface IPolicyImportExtension

IPolicyImportExtension 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드ImportPolicy사용자 지정 정책 어설션을 가져오고 구현 바인딩 요소를 추가할 수 있는 메서드를 정의합니다.
위쪽

끝점 기능 또는 요구 사항에 대한 사용자 지정 정책 어설션의 특정 끝점에서 공개하는 WSDL 정보를 검색하려면 IPolicyImportExtension 인터페이스를 구현합니다. 일반적으로 정책 가져오기에서는 특정 어설션을 검색한 후 어설션 요구 사항을 지원하도록 바인딩 요소를 삽입 또는 구성하거나 계약을 수정합니다.

상대적인 IPolicyExportExtension과 달리 IPolicyImportExtensionBindingElement 개체에서 반드시 구현할 필요는 없으며, 예제 부분에 나와 있는 클라이언트 구성 섹션을 사용하여 로드하거나 System.ServiceModel.Description.WsdlImporter 생성자에 프로그래밍 방식으로 추가할 수 있습니다.

WCF(Windows Communication Foundation)에서는 ImportPolicy 메서드에 두 개의 개체 즉, MetadataImporter 개체와 PolicyConversionContext 개체를 전달합니다. 일반적으로 PolicyConversionContext 개체에는 각 바인딩 범위에 대한 정책 어설션이 이미 포함되어 있습니다.

IPolicyImportExtension 구현에서는 다음 단계를 수행합니다.

  1. 범위에 따라 GetBindingAssertions, GetMessageBindingAssertions 또는 GetOperationBindingAssertions 메서드를 호출하여 해당 사용자 지정 정책 어설션을 찾습니다.

  2. 어설션 컬렉션에서 정책 어설션을 제거합니다. PolicyAssertionCollection.Remove 메서드는 어설션을 찾아서 반환하고 제거하는 과정을 한 단계로 수행합니다.

  3. 필요한 사용자 지정 BindingElementBindingElements 속성에 추가하거나 PolicyConversionContext.Contract 속성을 수정하여 바인딩 스택 또는 계약을 수정합니다.

2단계는 중요한 단계입니다. 모든 정책 가져오기를 호출한 후 WCF에서는 남아 있는 정책 어설션이 있는지 확인합니다. 정책 어설션이 남아 있을 경우 WCF에서는 정책 가져오기가 실패한 것으로 가정하고 연결된 바인딩을 가져오지 않습니다.

중요중요

악의적인 메타데이터 공급자가 정책 가져오기를 악용하기 위해 잘못된 XML을 메타데이터의 일부로 보낼 수 있습니다. 따라서 사용자 지정 정책 가져오기는 전달될 수 있는 모든 형태의 XML을 보호할 수 있을 정도로 강력해야 합니다.

사용자 지정 MetadataImporter 구현에서는 자체 PolicyConversionContext 개체를 구현하여 사용자 지정 메타데이터 형식에 연결된 정책 어설션을 추출해야 합니다.

정책 어설션이 아닌 사용자 지정 WSDL 요소를 가져오거나 내보내려면 System.ServiceModel.Description.IWsdlExportExtensionSystem.ServiceModel.Description.IWsdlImportExtension을 참조하십시오.

참고참고

구성 파일과 /svcutilConfig:<configFile> 옵션에서 동일한 구성 요소를 사용하여 ServiceModel Metadata 유틸리티 도구(Svcutil.exe)에서 사용자 지정 정책 가져오기 및 내보내기를 사용할 수 있습니다.

다음 코드 예제에서는 PolicyAssertionCollection.Remove 메서드를 사용하여 어설션을 찾아서 반환하고 제거하는 작업을 한 단계로 수행하는 방법을 보여 줍니다.


  #region IPolicyImporter Members
  public const string name1 = "acme";
  public const string ns1 = "http://Microsoft/WCF/Documentation/CustomPolicyAssertions";

  /*
   * Importing policy assertions usually means modifying the bindingelement stack in some way
   * to support the policy assertion. The procedure is:
   * 1. Find the custom assertion to import.
   * 2. Insert a supporting custom bindingelement or modify the current binding element collection
   *     to support the assertion.
   * 3. Remove the assertion from the collection. Once the ImportPolicy method has returned, 
   *     any remaining assertions for the binding cause the binding to fail import and not be 
   *     constructed.
   */
  public void ImportPolicy(MetadataImporter importer, PolicyConversionContext context)
  {
    Console.WriteLine("The custom policy importer has been called.");
    // Locate the custom assertion and remove it.
    XmlElement customAssertion = context.GetBindingAssertions().Remove(name1, ns1);
    if (customAssertion != null)
    {
      Console.WriteLine(
        "Removed our custom assertion from the imported "
        + "assertions collection and inserting our custom binding element."
      );
      // Here we would add the binding modification that implemented the policy.
      // This sample does not do this.
      Console.ForegroundColor = ConsoleColor.Red;
      Console.WriteLine(customAssertion.NamespaceURI + " : " + customAssertion.Name);
      Console.WriteLine(customAssertion.OuterXml);
      Console.ForegroundColor = ConsoleColor.Gray;
    }
 }
#endregion


다음 코드 예제에서는 System.ServiceModel.Description.MetadataResolver가 호출될 때 사용자 지정 정책 가져오기를 로드하는 클라이언트 응용 프로그램 구성 파일을 보여 줍니다.


<client>
    <endpoint 
      address="http://localhost:8080/StatefulService" 
      binding="wsHttpBinding"
      bindingConfiguration="CustomBinding_IStatefulService" 
      contract="IStatefulService"
      name="CustomBinding_IStatefulService" />
  <metadata>
    <policyImporters>
      <extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
    </policyImporters>
  </metadata>
</client>



<client>
    <endpoint 
      address="http://localhost:8080/StatefulService" 
      binding="wsHttpBinding"
      bindingConfiguration="CustomBinding_IStatefulService" 
      contract="IStatefulService"
      name="CustomBinding_IStatefulService" />
  <metadata>
    <policyImporters>
      <extension type="Microsoft.WCF.Documentation.CustomPolicyImporter, PolicyExtensions"/>
    </policyImporters>
  </metadata>
</client>


다음 코드 예제에서는 MetadataResolver를 사용하여 메타데이터를 설명 개체로 다운로드하고 확인하는 방법을 보여 줍니다.


// Download all metadata. 
ServiceEndpointCollection endpoints
  = MetadataResolver.Resolve(
    typeof(IStatefulService),
    new EndpointAddress("http://localhost:8080/StatefulService/mex")
  );


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft