Importowanie niestandardowych metadanych dla rozszerzenia WCF
W programie Windows Communication Foundation (WCF) importowanie metadanych to proces generowania abstrakcyjnej reprezentacji usługi lub jej składników na podstawie metadanych. Na przykład program WCF może importować ServiceEndpoint wystąpienia, Binding wystąpienia lub ContractDescription wystąpienia z dokumentu WSDL dla usługi. Aby zaimportować metadane usługi w programie WCF, użyj implementacji klasy abstrakcyjnej System.ServiceModel.Description.MetadataImporter . Typy pochodzące z MetadataImporter klasy implementują obsługę importowania formatów metadanych korzystających z logiki importu WS-Policy w programie WCF.
Niestandardowe metadane składają się z elementów XML, których importerzy metadanych dostarczonych przez system nie mogą importować. Zazwyczaj obejmuje to niestandardowe rozszerzenia WSDL i niestandardowe asercji zasad.
W tej sekcji opisano sposób importowania niestandardowych rozszerzeń I asercji zasad WSDL. Nie koncentruje się on na samym procesie importowania. Aby uzyskać więcej informacji na temat używania typów eksportowanych i importowanych metadanych niezależnie od tego, czy metadane są niestandardowe, czy obsługiwane przez system, zobacz Eksportowanie i importowanie metadanych.
Omówienie
Typ System.ServiceModel.Description.WsdlImporter jest implementacją klasy abstrakcyjnej dołączonej MetadataImporter do programu WCF. WsdlImporter Typ importuje metadane WSDL z dołączonymi zasadami, które są powiązane w System.ServiceModel.Description.MetadataSet obiekcie. Asercji zasad i rozszerzeń WSDL, które domyślne importerzy nie rozpoznają, są przekazywane do żadnych zarejestrowanych zasad niestandardowych i importerów WSDL do importowania. Zazwyczaj importerzy są implementowane w celu obsługi elementów powiązań zdefiniowanych przez użytkownika lub modyfikowania zaimportowanego kontraktu.
W tej sekcji opisano:
Sposób implementowania i używania interfejsu System.ServiceModel.Description.IWsdlImportExtension , który uwidacznia dane WSDL niestandardowym importerom przed generowaniem opisów i generowaniem kodu. Za pomocą tego interfejsu można zbadać lub zmodyfikować typy opisu i kompilację kodu wykonywaną przy użyciu danego zestawu metadanych.
Jak zaimplementować interfejs i używać System.ServiceModel.Description.IPolicyImportExtension go, który uwidacznia asercji zasad importerom przed generowaniem obiektów opisu. Za pomocą tego interfejsu można sprawdzić lub zmodyfikować powiązanie lub kontrakt na podstawie pobranych zasad.
Aby uzyskać więcej informacji na temat eksportowania niestandardowych asercji WSDL i zasad, zobacz Eksportowanie niestandardowych metadanych dla rozszerzenia WCF.
Importowanie niestandardowych rozszerzeń WSDL
Aby dodać obsługę importowania rozszerzeń WSDL, zaimplementuj IWsdlImportExtension interfejs, a następnie dodaj implementację WsdlImportExtensions do właściwości . Element WsdlImporter może również ładować implementacje interfejsu zarejestrowanego IWsdlImportExtension w pliku konfiguracji aplikacji. Należy pamiętać, że wielu importerów WSDL jest zarejestrowanych domyślnie, a kolejność zarejestrowanych importerów WSDL jest znacząca.
Gdy niestandardowy importer WSDL jest ładowany i używany przez metodę WsdlImporter, najpierw BeforeImport wywoływana jest metoda w celu włączenia modyfikacji metadanych przed procesem importowania. Następnie kontrakty są importowane po wywołaniu ImportContract metody w celu umożliwienia modyfikacji kontraktów importowanych z metadanych. Na koniec wywoływana ImportEndpoint jest metoda umożliwiająca modyfikację zaimportowanych punktów końcowych.
Aby uzyskać więcej informacji, zobacz How to: Import Custom WSDL (Instrukcje: importowanie niestandardowych WSDL).
Importowanie niestandardowych asercji zasad
WsdlImporter Typ i narzędzie ServiceModel Metadata Utility Tool (Svcutil.exe) automatycznie obsługują przetwarzanie różnych typów asercji zasad w wyrażeniach zasad dołączonych do dokumentów WSDL. Te narzędzia zbierają, normalizują i scalają wyrażenia zasad dołączone do powiązań WSDL i portów WSDL.
Aby dodać obsługę importowania asercji zasad niestandardowych, zaimplementuj IPolicyImportExtension interfejs, a następnie dodaj implementację PolicyImportExtensions do właściwości . Element MetadataImporter może również ładować implementacje interfejsu zarejestrowanego IPolicyImportExtension w pliku konfiguracji aplikacji. Należy pamiętać, że wielu importerów zasad jest zarejestrowanych domyślnie, a kolejność zarejestrowanych importerów zasad jest znacząca.
System metadanych wielokrotnie wywołuje metodę IPolicyImportExtension.ImportPolicy dla wszystkich zarejestrowanych rozszerzeń importu zasad dla każdej kombinacji alternatywnych zasad dołączonych do tematów zasad komunikatu, operacji i punktu końcowego. Podczas importowania portu WSDL zasady dołączone do portu i odpowiednie powiązanie WSDL są scalane przed wywołaniem do rozszerzeń importu zasad. Alternatywy zasad są udostępniane za pośrednictwem PolicyConversionContext obiektu as PolicyAssertionCollection . Każda PolicyAssertionCollection z nich jest kolekcją asercji zasad reprezentowanych przez XmlElement obiekty.
Właściwości Contract i BindingElements obiektu PolicyConversionContext uwidaczniają ContractDescription obiekty i BindingElement zaimportowane z WSDL. Rozszerzenia importu zasad przetwarzają asercji zasad, wyszukując wystąpienia określonego typu asercji zasad, wprowadzając odpowiednie zmiany w ContractDescription obiektach lub BindingElement , a następnie usuwając asercji zasad z odpowiedniego PolicyAssertionCollection wystąpienia.
Atrybut wsp:Optional
i zagnieżdżone wyrażenia zasad nie są znormalizowane, więc rozszerzenia importu zasad muszą obsługiwać te konstrukcje zasad. Ponadto rozszerzenia importu zasad mogą być wywoływane wiele razy z tymi samymi ContractDescription obiektami i BindingElement , więc rozszerzenia importu zasad powinny być niezawodne dla tego zachowania.
Ważne
Nieprawidłowe lub nieprawidłowe metadane można przekazać do importera. Upewnij się, że importerzy niestandardowi są niezawodni dla wszystkich form kodu XML.