Udostępnij przez


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 usługa WCF może importować wystąpienia ServiceEndpoint, Binding lub ContractDescription 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, które korzystają z logiki importowania 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.

Przegląd

Typ System.ServiceModel.Description.WsdlImporter jest implementacją abstrakcyjnej klasy MetadataImporter, która jest częścią programu WCF. WsdlImporter typ importuje metadane WSDL z dołączonymi zasadami, które są zawarte w System.ServiceModel.Description.MetadataSet obiekcie. Deklaracje polityki i rozszerzenia WSDL, których domyślni importerzy nie rozpoznają, są przekazywane do każdego zarejestrowanego niestandardowego importera zasad i WSDL w celu importowania. Zazwyczaj importerzy są implementowani, aby obsługiwać elementy wiążące zdefiniowane przez użytkownika lub modyfikować zaimportowany kontrakt.

W tej sekcji opisano:

  1. 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.

  2. Jak zaimplementować interfejs System.ServiceModel.Description.IPolicyImportExtension i używać go, który uwidacznia asercje polityki 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ć zarejestrowane w pliku konfiguracji aplikacji implementacje interfejsu IWsdlImportExtension. 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 WsdlImporter, najpierw jest wywoływana metoda BeforeImport aby umożliwić modyfikację 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łujemy metodę ImportEndpoint, aby umożliwić modyfikację zaimportowanych punktów końcowych.

Aby uzyskać więcej informacji, zobacz How to: Import Custom WSDL (Instrukcje: importowanie niestandardowych WSDL).

Importowanie niestandardowych twierdzeń polityki

WsdlImporter Typ i narzędzie ServiceModel Metadata Utility Tool (Svcutil.exe) automatycznie obsługują przetwarzanie różnorodnych 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 interfejs IPolicyImportExtension, a następnie dodaj swoją implementację do właściwości PolicyImportExtensions. Element MetadataImporter może również ładować zarejestrowane w pliku konfiguracji aplikacji implementacje interfejsu IPolicyImportExtension. 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 reguł polityki dla każdej kombinacji alternatywnych opcji polityki powiązanych z tematami polityki komunikatu, operacji i punktu końcowego. Podczas importowania portu WSDL polityki dołączone do portu i odpowiednie wiązanie WSDL są scalane przed wywołaniem rozszerzeń importu zasad. Alternatywy zasad są udostępniane za pośrednictwem PolicyConversionContext obiektu as PolicyAssertionCollection . Każda PolicyAssertionCollection jest kolekcją asercji polityk reprezentowanych przez obiekty XmlElement.

Właściwości Contract i BindingElements obiektu PolicyConversionContext udostępniają obiekty ContractDescription i BindingElement, które zostały zaimportowane z WSDL. Proces rozszerzeń importu zasad przetwarza asercje zasad, wyszukując wystąpienia określonego typu asercji zasad, wprowadza odpowiednie zmiany w obiektach ContractDescription lub BindingElement, a następnie usuwa asercje zasad z odpowiedniego wystąpienia PolicyAssertionCollection.

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 polityk mogą być wywoływane wiele razy tymi samymi obiektami ContractDescription i BindingElement, więc powinny być odporne na takie zachowanie.

Ważne

Nieprawidłowe lub niewłaściwe metadane można przekazać do importera. Upewnij się, że importerzy niestandardowi są niezawodni dla wszystkich form kodu XML.

Zobacz także