IPolicyImportExtension.ImportPolicy 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
사용자 지정 정책 어설션을 가져오고 구현 바인딩 요소를 추가할 수 있는 메서드를 정의합니다.
public:
void ImportPolicy(System::ServiceModel::Description::MetadataImporter ^ importer, System::ServiceModel::Description::PolicyConversionContext ^ context);
public void ImportPolicy (System.ServiceModel.Description.MetadataImporter importer, System.ServiceModel.Description.PolicyConversionContext context);
abstract member ImportPolicy : System.ServiceModel.Description.MetadataImporter * System.ServiceModel.Description.PolicyConversionContext -> unit
Public Sub ImportPolicy (importer As MetadataImporter, context As PolicyConversionContext)
매개 변수
- importer
- MetadataImporter
사용 중인 MetadataImporter 개체입니다.
- context
- PolicyConversionContext
가져올 수 있는 정책 어설션과, 구현 바인딩 요소를 추가할 수 있는 바인딩 요소 컬렉션을 모두 포함하는 PolicyConversionContext입니다.
예제
다음 코드 예제에서는 메서드를 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
#Region "IPolicyImporter Members"
Public Const name1 As String = "acme"
Public Const ns1 As String = "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 Sub ImportPolicy(ByVal importer As MetadataImporter, ByVal context As PolicyConversionContext) Implements IPolicyImportExtension.ImportPolicy
Console.WriteLine("The custom policy importer has been called.")
' Locate the custom assertion and remove it.
Dim customAssertion As XmlElement = context.GetBindingAssertions().Remove(name1, ns1)
If customAssertion IsNot Nothing Then
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
End If
End Sub
#End Region
다음 코드 예제에서는 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>
다음 코드 예제에서는 메타데이터를 다운로드하여 설명 개체로 확인하는 데 사용하는 MetadataResolver 방법을 보여줍니다.
// Download all metadata.
ServiceEndpointCollection endpoints
= MetadataResolver.Resolve(
typeof(IStatefulService),
new EndpointAddress("http://localhost:8080/StatefulService/mex")
);
' Download all metadata.
Dim endpoints As ServiceEndpointCollection = MetadataResolver.Resolve(GetType(IStatefulService), New EndpointAddress("http://localhost:8080/StatefulService/mex"))
설명
ImportPolicy
정책 어설션을 가져오고 어설션을 지원하기 위해 가져온 계약 또는 바인딩을 일부 수정하는 메서드를 구현합니다. 일반적으로 정책 가져오기자는 가져오는 바인딩에 바인딩 요소를 구성하거나 삽입하여 사용자 지정 정책 어설션을 찾는 데 응답합니다.
Windows Communication Foundation(WCF)은 메서드에 두 개체 ImportPolicy 를 전달합니다PolicyConversionContext.MetadataImporter 일반적으로 개체에는 PolicyConversionContext 각 바인딩 범위에 대한 정책 어설션이 이미 포함되어 있습니다.
구현은 IPolicyImportExtension 다음 단계를 수행합니다.
범위에 따라 메서드 또는 GetOperationBindingAssertions 메서드를 호출GetBindingAssertionsGetMessageBindingAssertions하여 책임지는 사용자 지정 정책 어설션을 찾습니다.
어설션 컬렉션에서 정책 어설션을 제거합니다. 메서드는 PolicyAssertionCollection.Remove 한 단계에서 어설션을 찾고, 반환하고, 제거합니다.
속성에 필요한 사용자 지정 BindingElement BindingElements 을 추가하거나 속성을 수정하여 바인딩 스택 또는 계약을 수정합니다 PolicyConversionContext.Contract .
2단계가 중요합니다. 모든 정책 가져오기를 호출한 후 WCF는 남아 있는 정책 어설션이 있는지 확인합니다. 정책 가져오기가 실패했다고 가정하고 연결된 바인딩을 가져오지 않습니다.