IPolicyImportExtension.ImportPolicy Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Definuje metodu, která může importovat vlastní kontrolní výrazy zásad a přidat implementující prvky vazby.
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)
Parametry
- importer
- MetadataImporter
Objekt MetadataImporter , který se používá.
- context
- PolicyConversionContext
Obsahuje PolicyConversionContext jak kontrolní výrazy zásad, které lze importovat, tak kolekce prvků vazby, do kterých lze přidat implementující prvky vazby.
Příklady
Následující příklad kódu ukazuje použití PolicyAssertionCollection.Remove metody k vyhledání, vrácení a odebrání kontrolního výrazu v jednom kroku.
#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
Následující příklad kódu ukazuje konfigurační soubor klientské aplikace pro načtení vlastního importu zásad při System.ServiceModel.Description.MetadataResolver vyvolání.
<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>
Následující příklad kódu ukazuje použití objektu MetadataResolver ke stažení a překladu metadat do objektů popisu.
// 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"))
Poznámky
Implementujte metodu ImportPolicy
pro získání kontrolních výrazů zásad a proveďte určitou změnu importovaného kontraktu nebo vazby pro podporu kontrolního výrazu. Importér zásad obvykle reaguje na vyhledání vlastního kontrolního výrazu zásad konfigurací nebo vložením elementu vazby do importované vazby.
Windows Communication Foundation (WCF) předá metodě dva objekty ImportPolicy , MetadataImporter a a PolicyConversionContext. Objekt již obvykle obsahuje kontrolní výrazy zásad pro každý obor vazby PolicyConversionContext .
Implementace IPolicyImportExtension provede následující kroky:
Vyhledá kontrolní výraz vlastní zásady, za který odpovídá, voláním GetBindingAssertionsmetod , GetMessageBindingAssertionsnebo GetOperationBindingAssertions v závislosti na oboru.
Odebere kontrolní výraz zásad z kolekce kontrolních výrazů. Metoda PolicyAssertionCollection.Remove vyhledá, vrátí a odebere kontrolní výraz v jednom kroku.
Upraví zásobník vazby nebo kontrakt přidáním požadovaného vlastního BindingElement objektu BindingElements do vlastnosti nebo úpravou PolicyConversionContext.Contract vlastnosti.
Krok 2 je důležitý. Po volání všech importérů zásad WCF zkontroluje existenci všech kontrolních výrazů zásad, které zůstávají. Pokud existuje, WCF předpokládá, že import zásad nebyl úspěšný a neimportuje přidruženou vazbu.