XML Web サービスの探索とは、XML Web サービスの説明を検索し、その内容を問い合わせる処理のことで、XML Web サービスにアクセスするための準備段階となります。探索プロセスにより、XML Web サービス クライアントは、XML Web サービスの有無、その機能、および XML Web サービスと適切に対話する方法をデザイン時に確認できます。
XML Web サービスが .disco ファイルを公開している場合は、プログラムによる探索を有効にすることができます。.disco ファイルは、他の探索ドキュメント、XSD スキーマ、およびサービスの説明へのリンクが含まれている XML ドキュメントです。また、ASP.NET を使用して作成する XML Web サービスには、生成された探索ドキュメントを提供する機能が自動的に備わります。クエリ文字列に URL と ?DISCO を指定して XML Web サービスにアクセスすると、その XML Web サービスに対する探索ドキュメントが自動的に生成されます。たとえば、XML Web サービスの URL が www.contoso.com/getquote.asmx の場合は、URL を www.contoso.com/getquote.asmx?DISCO と指定すると、探索ドキュメントが自動的に生成されます。
XML Web サービスに対する探索を有効にするには
任意のエディタを使用して XML ドキュメントを作成し、最初の行に <?xml version="1.0" ?> タグを追加します。
その XML ドキュメント内に、次のような <discovery> 要素を追加します。
<disco:discovery xmlns:disco="https://schemas.xmlsoap.org/disco/"></disco:discovery>
<discovery> 要素内には、サービスの説明、XSD スキーマ、および他の探索ドキュメントへの参照を追加します。
公開する参照はいくつでも追加できます。
https://schemas.xmlsoap.org/disco/scl/
XML 名前空間を含む <contractRef> 要素を追加することで、サービスの説明への参照が探索ドキュメントに指定されます。同様に、<discoveryRef> XML 要素、<schemaRef> XML 要素をそれぞれ追加することで、他の探索ドキュメントおよび XSD スキーマへの参照が指定されます。XSD スキーマへの参照には、XML 名前空間https://schemas.xmlsoap.org/disco/schema
を指定する必要があります。参照する 3 種類のドキュメントすべてには、ref 属性を使用することでドキュメントの場所を指定します。探索ドキュメント、サービスの説明、および XSD スキーマを参照するコード例を次に示します。<?xml version="1.0"?> <discovery xmlns="https://schemas.xmlsoap.org/disco/"> <discoveryRef ref="/Folder/Default.disco"/> <contractRef ref="http://MyWebServer/UserName.asmx?WSDL" docRef="Service.htm" xmlns="https://schemas.xmlsoap.org/disco/scl/"/> <schemaRef ref="Schema.xsd" xmlns="https://schemas.xmlsoap.org/disco/schema/"/> </discovery>
discoveryRef 要素に示すように探索ドキュメントが存在するディレクトリを基準にした参照を指定することも、contractRef 要素に示すように URI を基準にした参照を指定することもできます。
探索ドキュメントを Web サーバー上の仮想ディレクトリにコピーすることで、Web サーバーに配置します。
オプションとして、サービスの利用者がドキュメントを指定しなくても IIS アプリケーションを指定することで URL に移動できるようにする場合は、IIS アプリケーションの既定ページへのリンクを追加できます。これにより、サービスの利用者は探索ドキュメントの名前を知っている必要がなくなります。したがって、利用者は探索プロセス時に次のような URL を指定できます。
http://MyWebServer/MyWebApplication
Web アプリケーションの既定ページが HTML ページの場合
Web サーバーの既定 Web ページの <head> タグに探索ドキュメントへのリンクを追加します。たとえば、探索ドキュメントの名前をMyWebService.disco
にして、そのドキュメントを既定ページと同じディレクトリに配置する場合には、既定の Web ページで次のようなタグを追加します。<HEAD> <link type='text/xml' rel='alternate' href='MyWebService.disco'/> </HEAD>
Web アプリケーションの既定ページが XML ドキュメントの場合
Web サーバーの既定 Web ページの <head> タグに探索ドキュメントへのリンクを追加します。たとえば、探索ドキュメントの名前を
MyWebService.disco
にして、そのドキュメントを既定ページと同じディレクトリに配置する場合には、既定ページの先頭に次のように入力します。<?xml-stylesheet type="text/xml" alternate="yes" href="MyWebService.disco" ?>
Visual Studio .NET を使用している場合は、動的探索を有効にして、XML Web サービス クライアント アプリケーションから、探索ドキュメントを作成せずに、Web サーバーで利用可能な XML Web サービスを探索できるようにすることも可能です。動的探索を有効にした場合、クライアント アプリケーションでは、[Web 参照の追加] ダイアログ ボックスで、特定の探索ドキュメントの代わりに、www.contoso.com/default.vsdisco のように .vsdisco セクションを含むファイルを参照する URL を指定します。
Web サーバーの動的探索を有効にするには、次の <add> 要素を追加して machine.config ファイルを編集します。type 属性は 1 行に記述する必要があるので、次の例では改行を無視してください。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.vsdisco" type="System.Web.Services.Discovery.DiscoveryRequestHandler, System.Web.Services, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/> </httpHandlers> </system.web> </configuration>
**メモ **動的探索を有効にすると、Web サーバー上の、要求した URL の下にあるすべての XML Web サービスと探索ドキュメントを探索できるようになります。したがって、Web サーバーがファイアウォールやその他のセキュリティ機能を使用したネットワーク上にない場合は、誤って機密データが公開される可能性があるので、動的探索を有効にするときには注意が必要です。
参照
XML Web サービスの配置 | ASP.NET を使用して作成する XML Web サービスの構成オプション | ASP.NET を使用した XML Web サービスの作成