Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Policyuttryck beskriver kapaciteterna och kraven för en tjänstslutpunkt. Klientprogram kan använda principkontroller i tjänstmetadata för att konfigurera klientbindningen eller för att anpassa tjänstkontraktet för en tjänstslutpunkt.
Anpassade princippåståenden importeras genom att implementera gränssnittet System.ServiceModel.Description.IPolicyImportExtension och skicka objektet till metadatasystemet, eller genom att registrera implementeringstypen i din programkonfigurationsfil. Implementeringar av IPolicyImportExtension gränssnittet måste tillhandahålla en parameterlös konstruktor.
Importera anpassade regeldeklarationer
Implementera gränssnittet i System.ServiceModel.Description.IPolicyImportExtension en klass. Se följande procedurer.
Infoga den anpassade principimportören genom att:
Använda en konfigurationsfil. Se följande procedurer.
Använda en konfigurationsfil med ServiceModel Metadata Utility Tool (Svcutil.exe). Se följande procedurer.
Programmatisk infogning av policyimportören. Se följande procedurer.
Implementera gränssnittet System.ServiceModel.Description.IPolicyImportExtension på valfri klass
IPolicyImportExtension.ImportPolicy I metoden hittar du de principkontroller som du vill importera för varje principämne som du är intresserad av genom att anropa lämplig metod (beroende på omfånget för det försäkran du vill ha) för System.ServiceModel.Description.PolicyConversionContext objektet som skickas till metoden. Följande kodexempel visar hur du använder PolicyAssertionCollection.Remove-metoden för att lokalisera det anpassade policyuttrycket och ta bort det från samlingen i ett steg. Om du använder metoden ta bort för att hitta och ta bort försäkran behöver du inte utföra steg 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 IfBearbeta policydeklarationerna. Observera att principsystemet inte normaliserar kapslade principer och
wsp:optional. Du måste bearbeta dessa strukturer i implementeringen av policy-importtillägget.Utför anpassningen till bindning eller kontrakt som stöder den funktion eller det krav som anges i policyutfästelsen. Vanligtvis indikerar försäkran att en bindning kräver en viss konfiguration eller ett specifikt bindningselement. Gör dessa ändringar genom att komma åt egenskapen PolicyConversionContext.BindingElements . Andra intyg kräver att du ändrar kontraktet. Du kan komma åt och ändra kontraktet med hjälp av PolicyConversionContext.Contract egenskapen . Observera att din policyimportör kan anropas flera gånger för samma bindning och kontrakt, men olika policyalternativ om importen av ett policyalternativ misslyckas. Koden bör vara motståndskraftig mot det här beteendet.
Ta bort den anpassade policypåståendet från påståendesamlingen. Om du inte tar bort försäkran förutsätter WCF (Windows Communication Foundation) att principimporten misslyckades och inte importerar den associerade bindningen. Om du använde PolicyAssertionCollection.Remove metoden för att hitta den anpassade policyprincipen och ta bort den från samlingen i ett steg behöver du inte utföra det här steget.
Infoga den anpassade policyimporteraren i metadatasystemet med hjälp av en konfigurationsfil
Lägg till typen av importör i
<extensions>-elementet inom <policyImporters>-elementet i klientkonfigurationsfilen.<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>I klientprogrammet används System.ServiceModel.Description.MetadataResolver eller System.ServiceModel.Description.WsdlImporter för att lösa metadata, och importören kommer att anropas automatiskt.
// 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"))
Infoga den anpassade principimportören i metadatasystemet med hjälp av Svcutil.exe
Lägg till importörstypen i
<extensions>-elementet inuti <policyImporters>-elementet i Svcutil.exe.config-konfigurationsfilen. Du kan också använda Svcutil.exe för att läsa in policyimportörstyper som registrerats i en annan konfigurationsfil med hjälp av alternativet/svcutilConfig.Använd ServiceModel Metadata Utility Tool (Svcutil.exe) för att importera metadata och importören anropas automatiskt.
Infoga den anpassade policyimportören i metadatasystemet programmeringsmässigt
- Lägg till importören i MetadataImporter.PolicyImportExtensions egenskapen (till exempel om du använder System.ServiceModel.Description.WsdlImporter) innan du importerar metadata.