連載:世界のWebサービス
第11回 Windows XPでXML Webサービスへアクセス
2.WebページからXML Webサービスへアクセス
田口景介
2002/01/09 |
|
■コンプレックス・タイプのハンドリング
サンプルに使ったCalcサービスはlong型のデータを扱うだけだったのでスクリプト言語で直接扱うことができたが、XML Webサービスでは構造体のような複雑なデータ型を扱うこともできる。例えば、http://www.webservice.jp/netdict/index.htmlで公開されているNetDictionaryサービスでは、WORD型やITEM型などの独自の型が使われている。こうした複雑なデータ型をWSHスクリプトから扱う方法はあるのだろうか。
結論をいえば、方法はあるが、サーバ側での対応が必要になるため、第三者が公開しているXML Webサービスへのアクセスは難しい。具体的には「ISoapTypeMapperインターフェイス(MSSOAPで定義されている)」を実装するCOMオブジェクトを作成し、これをサーバ側とクライアント側の両方に登録する。さらにサーバ側にこのCOMオブジェクトとXML Webサービスの対応を指示する「WSMLファイル」を用意する。これをXML Webサービスで定義されているすべての構造体について、それぞれ作成しておく必要がある。
WSHスクリプトでXML Webサービス・クライアントを作成するメリットは手軽さにあるのだから、わざわざC++やVBを使ってCOMオブジェクトを作ってまでしてWSHスクリプトを使う必然性はあまり感じられない。そこまでするのであれば、C#やVB .NETを使ってクライアントを作った方がよほど簡単にできるはずだ。ただ自身で開発したXML Webサービスを自身でホストし、クライアントを.NET環境ではなくC++やVBで開発するならば、1つの選択肢になる。
WebページからXML Webサービスへアクセスする
MSSOAP.SoapClientオブジェクトはごく一般的なCOMオブジェクトとして実装されているので、用途はWSHスクリプトばかりではない。例えば、次のリストに示すWebページを用意すれば、WebブラウザからWebサービスを呼び出すことも可能だ。
1: <html>
2: <head>
3: <script langauge="javascript">
4: function calculate() {
5: var sc = new ActiveXObject("MSSOAP.SoapClient");
6: sc.mssoapinit("http://localhost/Calc/CalcService.asmx?wsdl");
7: result.value = sc.add(s1.value, s2.value);
8: }
9: </script>
10: </head>
11:
12: <body>
13: <input type="text" id="s1" value="">
14: +
15: <input type="text" id="s2" value="">
16: =
17: <input type="text" id="result" value="">
18: <input type="button" id="calc" value="calculate" onclick="calculate();">
19: </body>
20: </html>
|
|
WebページからXML Webサービスへアクセスするスクリプト |
|
XML WebサービスをアクセスするWebページの実行画面 |
一般的にクライアント・サイドからのアクションでサーバ・サイドのコードを実行するには、ASP(Active Server Pages)のようなサーバ・サイドで実行されるコードを含むページを用意し、これにアクセスする必要がある。しかしASPの呼び出しは必然的にページの再読み込みを伴う。サーバ・サイドのコードを実行したいだけなのにページの再送を要求するのは、サーバ・サイドにもクライアント・サイドにも無駄な負担でしかない。XML Webサービスはこうした無駄を省くためにも利用価値がある。
ただし、WebページからXML Webサービスへアクセスするには、ActiveXコントロールであるSoapClientオブジェクトをクライアント・サイドで実行しなければならず、これをIEのデフォルト設定で実行すると警告メッセージが表示されてしまう。セキュリティ設定を変更すれば無条件で実行することも可能だが、あまり好ましい対策とはいえない。残念ながらこうした用途でXML WebサービスとMSSOAPを利用するのは実用的とはいい難いようだ。しかし、XML Webサービスにはこうした可能性も秘められていることを覚えておくと、今後どこかで役に立つこともあるだろう。
Insider.NET 記事ランキング
本日
月間