Postupy: Import kontrolních výrazů vlastních zásad
Kontrolní výrazy zásad popisují možnosti a požadavky koncového bodu služby. Klientské aplikace můžou pomocí kontrolních výrazů zásad v metadatech služby nakonfigurovat vazbu klienta nebo přizpůsobit kontrakt služby pro koncový bod služby.
Kontrolní výrazy vlastních zásad se importují implementací System.ServiceModel.Description.IPolicyImportExtension rozhraní a předáním daného objektu do systému metadat nebo registrací typu implementace v konfiguračním souboru aplikace. IPolicyImportExtension Implementace rozhraní musí poskytovat konstruktor bez parametrů.
Import kontrolních výrazů vlastních zásad
Implementujte System.ServiceModel.Description.IPolicyImportExtension rozhraní ve třídě. Podívejte se na následující postupy.
Vložte vlastní nástroj pro import zásad:
Pomocí konfiguračního souboru. Podívejte se na následující postupy.
Použití konfiguračního souboru s nástrojem ServiceModel Metadata Utility (Svcutil.exe) Podívejte se na následující postupy.
Vkládání importu zásad prostřednictvím kódu programu. Podívejte se na následující postupy.
Implementace System.ServiceModel.Description.IPolicyImportExtension rozhraní v libovolné třídě
IPolicyImportExtension.ImportPolicy V metodě vyhledejte pro každý předmět zásad, který vás zajímá, kontrolní výrazy zásad, které chcete importovat, voláním příslušné metody (v závislosti na rozsahu požadovaného kontrolního výrazu) na System.ServiceModel.Description.PolicyConversionContext objektu předané metodě. Následující příklad kódu ukazuje, jak použít metodu PolicyAssertionCollection.Remove k vyhledání vlastního kontrolního výrazu zásad a odebrání z kolekce v jednom kroku. Pokud k vyhledání a odebrání kontrolního výrazu používáte metodu remove, nemusíte provádět krok 4.
// 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; }
' 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
Zpracování kontrolních výrazů zásad Všimněte si, že systém zásad nenormalizuje vnořené zásady a
wsp:optional
. Tyto konstrukty musíte zpracovat v implementaci rozšíření importu zásad.Proveďte přizpůsobení vazby nebo kontraktu, který podporuje schopnost nebo požadavek určený kontrolním výrazem zásady. Kontrolní výrazy obvykle označují, že vazba vyžaduje konkrétní konfiguraci nebo určitý element vazby. Tyto úpravy proveďte tak, že k vlastnosti přistupujete PolicyConversionContext.BindingElements . Jiné kontrolní výrazy vyžadují, abyste kontrakt upravili. Ke smlouvě můžete přistupovat a upravovat ji PolicyConversionContext.Contract pomocí vlastnosti. Upozorňujeme, že import zásad se může pro stejnou vazbu a smlouvu volat několikrát, ale pokud import alternativní zásady selže, může se mu volat různé alternativy zásad. Váš kód by měl být odolný vůči tomuto chování.
Odeberte kontrolní výraz vlastní zásady z kolekce kontrolních výrazů. Pokud neodeberete kontrolní výraz Windows Communication Foundation (WCF), předpokládá, že import zásad nebyl úspěšný a nenaimportuje přidruženou vazbu. Pokud jste metodu PolicyAssertionCollection.Remove použili k vyhledání kontrolního výrazu vlastní zásady a odebrání z kolekce v jednom kroku, nemusíte tento krok provádět.
Vložení importu vlastních zásad do systému metadat pomocí konfiguračního souboru
Do elementu uvnitř elementu
<extensions>
<policyImporters> v konfiguračním souboru klienta přidejte typ importu.<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>
V klientské aplikaci použijte System.ServiceModel.Description.MetadataResolver nebo System.ServiceModel.Description.WsdlImporter přeložte metadata a import je vyvolán automaticky.
// 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"))
Vložení importu vlastních zásad do systému metadat pomocí Svcutil.exe
Přidejte typ importu
<extensions>
do elementu uvnitř elementu <policyImporters> v konfiguračním souboru Svcutil.exe.config. Pomocí této možnosti můžete také odkazovat na Svcutil.exe načtení typů importu zásad registrovaných v jiném konfiguračním/svcutilConfig
souboru.Pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe) naimportujte metadata a import je vyvolán automaticky.
Programové vložení importu vlastních zásad do systému metadat
- Před importem metadat přidejte do vlastnosti dovozce MetadataImporter.PolicyImportExtensions (například pokud používáte System.ServiceModel.Description.WsdlImporter) .