Útmutató: Egyéni házirend-állítások importálása
A házirend-állítások egy szolgáltatásvégpont képességeit és követelményeit írják le. Az ügyfélalkalmazások a szolgáltatás metaadataiban házirend-állításokkal konfigurálhatják az ügyfélkötést, vagy testre szabhatják a szolgáltatásvégpont szolgáltatási szerződését.
Az egyéni házirend-állítások importálásához implementálja az System.ServiceModel.Description.IPolicyImportExtension interfészt, és átadja az objektumot a metaadat-rendszernek, vagy regisztrálja a megvalósítás típusát az alkalmazáskonfigurációs fájlban. Az interfész implementációinak IPolicyImportExtension paraméter nélküli konstruktort kell biztosítaniuk.
Egyéni házirend-állítások importálása
Implementálja a System.ServiceModel.Description.IPolicyImportExtension felületet egy osztályon. Lásd az alábbi eljárásokat.
Szúrja be az egyéni szabályzatimportőrt a következővel:
Konfigurációs fájl használata. Lásd az alábbi eljárásokat.
Konfigurációs fájl használata ServiceModel Metadata Segédprogrammal (Svcutil.exe). Lásd az alábbi eljárásokat.
Programozott módon szúrja be a szabályzatimportálót. Lásd az alábbi eljárásokat.
A System.ServiceModel.Description.IPolicyImportExtension felület implementálása bármely osztályban
IPolicyImportExtension.ImportPolicy A metódusban minden olyan szabályzattulajdonos esetében, amely érdekli, keresse meg az importálni kívánt házirend-állításokat a megfelelő metódus meghívásával (a kívánt állítás hatókörétől függően) a System.ServiceModel.Description.PolicyConversionContext metódusnak átadott objektumon. Az alábbi példakód bemutatja, hogyan lehet a PolicyAssertionCollection.Remove metódust használni az egyéni szabályzat-állítás megkereséséhez és a gyűjteményből való eltávolításához egy lépésben. Ha az eltávolítási módszerrel megkeresi és eltávolítja az állítást, nem kell végrehajtania a 4. lépést.
// 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
A házirend-állítások feldolgozása. Vegye figyelembe, hogy a szabályzatrendszer nem normalizálja a beágyazott szabályzatokat és
wsp:optional
a . Ezeket a szerkezeteket a szabályzat importálási bővítményének implementálásában kell feldolgoznia.Végezze el a kötés vagy szerződés testreszabását, amely támogatja a házirend-állítás által meghatározott képességet vagy követelményt. Az állítások általában azt jelzik, hogy egy kötéshez egy adott konfiguráció vagy egy adott kötési elem szükséges. Végezze el ezeket a módosításokat a PolicyConversionContext.BindingElements tulajdonság eléréséhez. Egyéb állítások esetén módosítania kell a szerződést. A szerződést a tulajdonság használatával PolicyConversionContext.Contract érheti el és módosíthatja. Vegye figyelembe, hogy a szabályzatimportáló többször is meghívható ugyanahhoz a kötéshez és szerződéshez, de a szabályzat alternatíváinak importálása meghiúsul. A kódnak rugalmasnak kell lennie ehhez a viselkedéshez.
Távolítsa el az egyéni házirend-állítást az állítási gyűjteményből. Ha nem távolítja el a Windows Communication Foundation (WCF) állítást, feltételezi, hogy a házirend importálása sikertelen volt, és nem importálja a társított kötést. Ha ezzel a PolicyAssertionCollection.Remove módszerrel megkereste az egyéni házirend-állítást, és egy lépésben eltávolította azt a gyűjteményből, nem kell elvégeznie ezt a lépést.
Az egyéni szabályzatimportőr beszúrása a metaadatrendszerbe konfigurációs fájl használatával
Adja hozzá az importáló típust az
<extensions>
ügyfélkonfigurációs fájl PolicyImporters> elemén belüli <elemhez.<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>
Az ügyfélalkalmazásban használja vagy oldja fel a System.ServiceModel.Description.MetadataResolverSystem.ServiceModel.Description.WsdlImporter metaadatokat, és a rendszer automatikusan meghívja az importálót.
// 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"))
Az egyéni szabályzatimportőr beszúrása a metaadat-rendszerbe Svcutil.exe
Adja hozzá az importáló típusát a
<extensions>
<Svcutil.exe.config konfigurációs fájl PolicyImporters> elemében található elemhez. Az Svcutil.exe másik konfigurációs fájlban regisztrált házirendimportőr-típusok betöltésére is rámutathat a/svcutilConfig
beállítás használatával.A ServiceModel metadata segédprogrammal (Svcutil.exe) importálhatja a metaadatokat, és a rendszer automatikusan meghívja az importálót.
Az egyéni szabályzatimportőr programozott beszúrása a metaadat-rendszerbe
- Adja hozzá az importálót a MetadataImporter.PolicyImportExtensions tulajdonsághoz (például ha a ) a System.ServiceModel.Description.WsdlImportermetaadatok importálása előtt használja.