Megosztás a következőn keresztül:


Metaadat-architektúra áttekintése

A Windows Communication Foundation (WCF) gazdag infrastruktúrát biztosít a szolgáltatás metaadatainak exportálásához, közzétételéhez, lekéréséhez és importálásához. A WCF-szolgáltatások metaadatokkal írják le a szolgáltatás végpontjaival való interakciót, hogy az eszközök, például a Svcutil.exe automatikusan generálhassák a szolgáltatás eléréséhez szükséges ügyfélkódot.

A WCF metaadat-infrastruktúrát alkotó legtöbb típus a System.ServiceModel.Description névtérben található.

A WCF az osztály használatával ServiceEndpoint írja le a szolgáltatás végpontjait. A WCF használatával metaadatokat hozhat létre a szolgáltatásvégpontokhoz, vagy importálhatja a szolgáltatás metaadatait a példányok létrehozásához ServiceEndpoint .

A WCF a szolgáltatás metaadatait jelöli a MetadataSet típuspéldányként, amelynek struktúrája erősen kötődik a WS-MetadataExchange-ben definiált metaadat-szerializálási formátumhoz. A MetadataSet típus példánygyűjteményként MetadataSection köti össze a szolgáltatás tényleges metaadatait, például a Web Services Description Language (WSDL) dokumentumait, AZ XML-sémadokumentumokat vagy a WS-Policy kifejezéseket. Minden System.ServiceModel.Description.MetadataSection példány tartalmaz egy adott metaadat-dialektust és egy azonosítót. Az A System.ServiceModel.Description.MetadataSection a tulajdonságában a következő elemeket tartalmazhatja MetadataSection.Metadata :

A System.ServiceModel.Description.MetadataReference példányok egy másik metaadat-exchange (MEX) végpontra mutatnak, a System.ServiceModel.Description.MetadataLocation példányok pedig EGY HTTP-URL-cím használatával egy metaadat-dokumentumra mutatnak. A WCF támogatja a WSDL-dokumentumok használatát a szolgáltatásvégpontok, a szolgáltatási szerződések, a kötések, az üzenetcsere-minták, az üzenetek és a szolgáltatás által megvalósított hibaüzenetek leírásához. A szolgáltatás által használt adattípusokat az XML-sémát használó WSDL-dokumentumok ismertetik. További információ: Séma importálása és exportálása. A WCF használatával exportálhatja és importálhatja a WSDL-bővítményeket a szolgáltatás viselkedéséhez, a szerződés viselkedéséhez és a szolgáltatás funkcióit kiterjesztő kötési elemekhez. További információ: Egyéni metaadatok exportálása WCF-bővítményhez.

Szolgáltatás metaadatainak exportálása

A WCF-ben a metaadat-exportálás a szolgáltatásvégpontok leírásának és párhuzamos, szabványosított ábrázolásának a folyamata, amellyel az ügyfelek megérthetik a szolgáltatás használatát. A metaadatok példányokból ServiceEndpoint való exportálásához használja az MetadataExporter absztrakt osztály implementációját. Egy System.ServiceModel.Description.MetadataExporter implementáció egy példányba MetadataSet ágyazott metaadatokat hoz létre.

Az System.ServiceModel.Description.MetadataExporter osztály keretrendszert biztosít olyan szabályzatkifejezések létrehozásához, amelyek leírják a végpontkötések képességeit és követelményeit, valamint a kapcsolódó műveleteket, üzeneteket és hibákat. Ezek a szabályzatkifejezések egy PolicyConversionContext példányban vannak rögzítve. A System.ServiceModel.Description.MetadataExporter implementáció ezután csatolhatja ezeket a szabályzatkifejezéseket a létrehozott metaadatokhoz.

Azok System.ServiceModel.Description.MetadataExporter a hívások, System.ServiceModel.Channels.BindingElement amelyek implementálják az IPolicyExportExtension interfészt ServiceEndpoint egy objektum létrehozásakor PolicyConversionContext a System.ServiceModel.Description.MetadataExporter használni kívánt objektum kötésében. Az új szabályzat-állításokat úgy exportálhatja, ha implementálja az IPolicyExportExtension interfészt a BindingElement típus egyéni implementációiban.

A WsdlExporter típus a WCF-hez tartozó absztrakt osztály implementálása System.ServiceModel.Description.MetadataExporter . A WsdlExporter típus WSDL-metaadatokat hoz létre csatolt szabályzatkifejezésekkel.

Ha egyéni WSDL-metaadatokat vagy WSDL-bővítményeket szeretne exportálni egy szolgáltatásvégpont végponti viselkedéséhez, szerződési viselkedéséhez vagy kötési elemeihez, implementálhatja az interfészt IWsdlExportExtension . A WsdlExporter WSDL-dokumentum létrehozásakor az interfészt implementáló IWsdlExportExtension kötési elemeket, műveleti viselkedéseket, szerződési viselkedéseket és végponti viselkedéseket tekinti ServiceEndpoint meg.

Közzétételi szolgáltatás metaadatai

A WCF-szolgáltatások egy vagy több metaadatvégpont felfedésével tesznek közzé metaadatokat. A szolgáltatás metaadatainak közzététele szabványos protokollokkal teszi elérhetővé a szolgáltatás metaadatait, például MEX- és HTTP/GET-kéréseket. A metaadat-végpontok hasonlóak a többi szolgáltatásvégponthoz, mivel címmel, kötéssel és szerződéssel rendelkeznek. Metaadat-végpontokat adhat hozzá egy szolgáltatás gazdagépéhez konfigurációban vagy kódban.

Egy WCF-szolgáltatás metaadat-végpontjainak közzétételéhez először hozzá kell adnia a ServiceMetadataBehavior szolgáltatás viselkedésének egy példányát a szolgáltatáshoz. Ha egy példányt System.ServiceModel.Description.ServiceMetadataBehavior hozzáad a szolgáltatáshoz, azzal bővíti a szolgáltatást, hogy egy vagy több metaadatvégpont felfedésével közzéteheti a metaadatokat. Miután hozzáadta a szolgáltatás viselkedését System.ServiceModel.Description.ServiceMetadataBehavior , közzéteheti a MEX protokollt támogató metaadat-végpontokat, illetve a HTTP/GET kérelmekre válaszoló metaadat-végpontokat.

A MEX protokollt használó metaadat-végpontok hozzáadásához adjon hozzá szolgáltatásvégpontokat a szolgáltatásgazda számára, amely az IMetadataExchange.WCF nevű szolgáltatási szerződést használja, meghatározza a IMetadataExchange szolgáltatási szerződés nevét tartalmazó felületet. A WS-MetadataExchange végpontok vagy MEX-végpontok az osztály statikus gyári módszerei MetadataExchangeBindings által közzétett négy alapértelmezett kötés egyikét használhatják a WCF-eszközök által használt alapértelmezett kötések, például Svcutil.exe. A MEX metaadat-végpontjait egyéni kötéssel is konfigurálhatja.

A ServiceMetadataBehavior szolgáltatás metaadatainak System.ServiceModel.Description.WsdlExporter exportálása a szolgáltatás összes szolgáltatásvégpontja számára. A metaadatok szolgáltatásból való exportálásáról további információt a Metaadatok exportálása és importálása című témakörben talál.

A ServiceMetadataBehavior szolgáltatás gazdagépét úgy bővíti, hogy hozzáad egy ServiceMetadataExtension példányt bővítményként a szolgáltatás gazdagépéhez. Ez System.ServiceModel.Description.ServiceMetadataExtension biztosítja a metaadat-közzétételi protokollok implementálását. A szolgáltatás metaadatait futásidőben is System.ServiceModel.Description.ServiceMetadataExtension lekérheti a Metadata tulajdonság eléréséhez.

Figyelemfelhívás

Ha hozzáad egy MEX-végpontot az alkalmazáskonfigurációs fájlhoz, majd megkísérli hozzáadni a ServiceMetadataBehavior szolgáltatás gazdagépéhez kódban, a következő kivételt kapja:

System.InvalidOperationException: Az "IMetadataExchange" szerződésnév nem található a service1 szolgáltatás által megvalósított szerződések listájában. Adjon hozzá egy ServiceMetadataBehaviort a konfigurációs fájlhoz vagy közvetlenül a ServiceHosthoz a szerződés támogatásának engedélyezéséhez.

A probléma megkerüléséhez adja hozzá a ServiceMetadataBehavior konfigurációs fájlt, vagy adja hozzá a végpontot és ServiceMetadataBehavior a kódot is.

Ha egy alkalmazáskonfigurációs fájlban szeretne hozzáadni ServiceMetadataBehavior egy példát, tekintse meg az első lépéseket. A kód hozzáadására ServiceMetadataBehavior példaként tekintse meg az Önkiszolgáló mintafájlt.

Figyelemfelhívás

Ha olyan szolgáltatás metaadatait teszi közzé, amelyek két különböző szolgáltatási szerződést tesznek elérhetővé, amelyekben mindegyik azonos nevű műveletet tartalmaz, kivétel jelenik meg. Ha például olyan szolgáltatással rendelkezik, amely egy Get(Car c) művelettel rendelkező ICarService nevű szolgáltatási szerződést tesz elérhetővé, és ugyanaz a szolgáltatás egy IBookService nevű szolgáltatási szerződést tesz közzé, amely get(b könyv) művelettel rendelkezik, kivétel keletkezik, vagy hibaüzenet jelenik meg a szolgáltatás metaadatainak létrehozásakor. A probléma megoldásához tegye az alábbiak egyikét:

  • Nevezze át az egyik műveletet.
  • Állítsa be a Name nevet egy másik névre.
  • Állítsa a műveletek egyik névterét egy másik névtérre a Namespace tulajdonság használatával.

Szolgáltatás metaadatainak lekérése

A WCF szabványosított protokollok, például A WS-MetadataExchange és a HTTP használatával tudja lekérni a szolgáltatás metaadatait. Mindkét protokollt támogatja a MetadataExchangeClient típus. A szolgáltatás metaadatait egy cím és egy opcionális kötés megadásával kérdezheti le a System.ServiceModel.Description.MetadataExchangeClient típus használatával. A példány által System.ServiceModel.Description.MetadataExchangeClient használt kötés lehet a statikus osztály egyik alapértelmezett kötése MetadataExchangeBindings , egy felhasználó által megadott kötés, vagy a szerződés végpontkonfigurációjából IMetadataExchange betöltött kötés. A System.ServiceModel.Description.MetadataExchangeClient típussal HttpWebRequest a metaadatokRA mutató HTTP URL-hivatkozásokat is feloldhatja.

Alapértelmezés szerint egy System.ServiceModel.Description.MetadataExchangeClient példány egyetlen ChannelFactoryBase példányhoz van kötve. A virtuális metódus felülírásával módosíthatja vagy lecserélheti ChannelFactoryBase a GetChannelFactory használt példánytSystem.ServiceModel.Description.MetadataExchangeClient. Hasonlóképpen módosíthatja vagy lecserélheti azt a példányt, amelyet a System.Net.HttpWebRequestSystem.ServiceModel.Description.MetadataExchangeClient http/GET kérések létrehozásához használ a MetadataExchangeClient.GetWebRequest virtuális metódus felülírásával.

A szolgáltatás metaadatait a WS-MetadataExchange vagy HTTP/GET kérések használatával kérheti le a Svcutil.exe eszközzel, és átadhatja a /target:metadata kapcsolót és egy címet. Svcutil.exe letölti a metaadatokat a megadott címre, és menti a fájlokat a lemezre. Svcutil.exe belső példányt System.ServiceModel.Description.MetadataExchangeClient használ, és betölt egy MEX-végpontkonfigurációt (az alkalmazáskonfigurációs fájlból), amelynek a neve megegyezik a Svcutil.exe átadott cím sémájának nevével, ha van ilyen. Ellenkező esetben Svcutil.exe alapértelmezés szerint a statikus gyártípus által definiált kötések egyikét MetadataExchangeBindings használja.

Szolgáltatás metaadatainak importálása

A WCF-ben a metaadatok importálása a szolgáltatás vagy annak összetevőinek absztrakt ábrázolásának a metaadataiból történő generálása. A WCF például importálhat ServiceEndpoint példányokat, Binding példányokat vagy ContractDescription példányokat egy szolgáltatás WSDL-dokumentumából. A szolgáltatás metaadatainak WCF-ben való importálásához használja az MetadataImporter absztrakt osztály implementációját. Az osztályból System.ServiceModel.Description.MetadataImporter származó típusok támogatják a metaadat-formátumok importálását, amelyek kihasználják a WS-Policy importálási logikáját a WCF-ben.

Egy System.ServiceModel.Description.MetadataImporter implementáció összegyűjti az objektum szolgáltatás metaadataihoz PolicyConversionContext csatolt szabályzatkifejezéseket. Ezután System.ServiceModel.Description.MetadataImporter feldolgozza a szabályzatokat a metaadatok importálásának részeként a felület implementációinak IPolicyImportExtension meghívásával a PolicyImportExtensions tulajdonságban.

Az új házirend-állítások System.ServiceModel.Description.MetadataImporter importálásához támogatást adhat, ha hozzáadja a IPolicyImportExtension felület saját implementációját a PolicyImportExtensions gyűjteményhez egy System.ServiceModel.Description.MetadataImporter példányon. Másik lehetőségként regisztrálhatja a szabályzatimportálási bővítményt az ügyfélalkalmazás konfigurációs fájljában.

A System.ServiceModel.Description.WsdlImporter típus a WCF-hez tartozó absztrakt osztály implementálása System.ServiceModel.Description.MetadataImporter . A System.ServiceModel.Description.WsdlImporter típus egy objektumba csomagolt MetadataSet csatolt szabályzatokkal importálja a WSDL-metaadatokat.

A WSDL-bővítmények importálásához támogatást adhat a felület implementálásávalIWsdlImportExtension, majd az implementáció a példányon lévő System.ServiceModel.Description.WsdlImporter tulajdonsághoz WsdlImportExtensions való hozzáadásával. Az System.ServiceModel.Description.WsdlImporter ügyfélalkalmazás konfigurációs fájljában regisztrált felület implementációit System.ServiceModel.Description.IWsdlImportExtension is betöltheti.

Dinamikus kötések

Dinamikusan frissítheti a csatorna szolgáltatásvégpontra történő létrehozásához használt kötést abban az esetben, ha a végpont kötése megváltozik, vagy olyan végponthoz szeretne csatornát létrehozni, amely ugyanazt a szerződést használja, de eltérő kötéssel rendelkezik. A MetadataResolver statikus osztály használatával futtatáskor lekérheti és importálhatja a metaadatokat egy adott szerződést megvalósító szolgáltatásvégpontokhoz. Ezután az importált System.ServiceModel.Description.ServiceEndpoint objektumokkal létrehozhat egy ügyfél- vagy csatorna-előállítót a kívánt végponton.

Lásd még