連載:世界の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サービスにはこうした可能性も秘められていることを覚えておくと、今後どこかで役に立つこともあるだろう。End of Article

 

 INDEX
  [連載]世界のWebサービス―― 究極のWebサービスを求めて ――
  第11回 Windows XPでXML Webサービスへアクセス
    1.WebサービスとSOAPクライアント
  2.WebページからXML Webサービスへアクセス
 
「世界のWebサービス」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間