豊田 孝

 前回は単純なWebサービスを作成し,ASP .NETのテスト環境で呼び出しました。今回はWebサービスと,HTTP GET/POSTやSOAPなどの標準プロトコルの関係を詳しく解説します。また,Webサービス・コードの一部を変更し,ASP .NETがその変更にどのように対応するのかを具体的なサンプル・プログラムを通して考えます。なお,Webサービスの公開手順(仮想ディレクトリの作成など)などは今回は取り上げませんので,忘れてしまった人は,前回の記事を復習しておいてください。

図1●Webサービスを呼び出した画面
 まずは,Webサービスを呼び出したときに表示される,図1[拡大表示]のような初期画面の意味を確認しておきましょう。この画面には3つの注目点がありますが,番号順にそれぞれの意味を説明することにします。将来,Webサービスを本格的に学習する際の参考になれば幸いです。

注目点1の意味

 注目点1は,「既定の名前空間を変更してください」という指示(正式には推奨)です。親切にも,Visual C# .NETとVisual Basic .NET用の変更方法が紹介されています。それでは,指示に従って,前回作成したWebサービスをリスト1リスト2のように書き換えることにします。

図2●変更後のWebサービスを呼び出した画面
図3●引数情報を表示した画面
図4●「起動」ボタンをクリックして表示される画面
 指示に従って変更作業を行っているだけですから,特に難しいところはないと思います。変更後のWebサービスを呼び出してみると,図2[拡大表示]のような画面が表示されます。

 これは変更後のVisual C# .NET Webサービスを呼び出した時に表示される画面ですが,推奨文は消えています。どことなく寂しい画面になってしまいましたが,次回改善することにします。

 この寂しい画面は,この後で説明しますが,Webサービス・クラス・コードの一部が変更されたことをASP .NETが検出し,再コンパイルした結果なのです。次に注目点2の説明に移ります。

注目点2の意味

 注目点2は,インターネットに公開されるWebサービス(クラス)のメソッド名を指しています。この画面では,利用できるメソッドのことを「操作」と呼んでいます。このリンクをクリックすると,図3[拡大表示]のような画面が表示されてきます。

 この画面は,WebクライアントとWebサービス間の通信で使用されるプロトコルとWebサービス(メソッド)に渡す引数情報を表示しています。「値」欄がありますが,入力できる型に関する詳細な情報はありません。ここでは,深く考えずに,“ITPro”と入力してみます。「起動」ボタンをクリックすると,図4[拡大表示]のような画面が表示されてきます。

 入力した値とWebサービス側で用意した文字列が連結され,その結果が返されています。アドレス・バーを見ると分かるように,通信プロトコルとして,HTTP GETが使用されています。HTTP GETプロトコルについては,図3のように表示される画面を下方にスクロールし,関連する説明を一読してください。

 また,図4の画面内には,<?XMLタグがありますから,データの送受信ではXMLフォーマットが使われていることも分かります。ところで皆さん,返送文字列を囲む<string>というXMLタグはどのように決定されているのでしょう?このあたりの事情を知るには,図1に戻って注目点3の意味を理解する必要があります。さっそく,調べてみましょう。

注目点3の意味

図5●図1の「正式な定義」リンクをクリックした画面
図6●HTTP GETプロトコル使用時のデータの受け渡し表現
図7●データ交換にHTTP GETプロトコルを選択する
図8●変更したWDSL定義
図9●追加されたタグ
図10●サンプル・プログラムの動作確認テスト
 注目点3は「サービスの説明」となっていますが,その直前に「正式な定義」という文字が見えます。これはいったいどういう意味でしょう?おそらく,Webサービスにはじめて触れる人は,「正式な定義」という表現の意味を理解できないと思います。ここでは,とりあえず,このリンクをクリックしてみましょう。図5[拡大表示]のような画面が表示されます

 この画面のアドレス・バーには,WSDLという文字列が表示されています。WSDLは,Web Service Description Lanaguage(Webサービス記述言語)の略語です。つまり,この画面は,WebサービスをWSDLという言語で記述した情報なのです。「正式な定義」というのは,WSDL定義,つまり,業界標準言語で記述された定義,という意味だったのです。

 この画面を下方向にスクロールしていくと,図6[拡大表示]のような情報が定義されています。

 赤の四角で囲んである部分がHTTP GETプロトコル使用時のデータの受け渡し表現です。この画面には,SOAPやHTTP POSTなどのプロトコル名も見えます。これは,3種類のプロトコルがサポートされていることを示しています。3種類のプロトコルのうちから任意のプロトコルを選択できるのですが,詳細については,Webサービス・クライアント・プログラムを作成する段階で取り上げることにします。

 データ交換にHTTP GETプロトコルを選択すると,実際には図7[拡大表示]のような情報が交換されます。

 それではここで,Webサービスの一部を変更し,文字列ではなく,配列を返すようにしてみましょう。変更後のコードは,リスト3リスト4のようになります。

 ご覧のように,これらのWebサービスは文字列を配列として返します。変更後のこれらのコードは,WSDLで図8[拡大表示]のように定義されます。

 赤の太い下線の付いた部分を見てください。ArrayOfStringという新しいタグが生成されています。このタグは,図9[拡大表示]のように使われます。

 ご覧のように,受け渡しされるデータ型に応じて,タグが用意されています。分かりやすいといえば分かりやすいのですが,データ型が複雑になったときにどのような結果になるのか簡単には予測できません。Webサービス機能を実際に使用する場合には,各種のデータ型を用いたテストを行う必要があると思われます。

Webサービスの動作背景

 それでは最後に,ASP .NETとWebサービスの動作背景を確認しておきましょう。

 ASP .NETは,インターネットに公開するWebサービス(クラス)のソースコードが変更されると,内部でコンパイラを起動し,再コンパイルしています。次のような確認テストを行うと,このあたりの事情を自分の目で確認することができます。

確認テスト手順
ステップ1:WebServiceMonitor.htaを任意のディレクトリにダウンロードする
ステップ2:WebServiceMonitor.htaをダブル・クリックして起動し,最小化する
ステップ3:Webサービス・クラスの一部を変更し,保存する
ステップ4:ブラウザを起動し,変更したばかりのWebサービス・クラスを呼び出す
ステップ5:WebServiceMonitor.htaを最大化する

 私の環境では,図10[拡大表示]のような結果が返されます。

 この画面は,マシンを起動し,Webサービス・クラスを変更した直後に,Visual C# .NET Webサービスを呼び出した様子を示しています。ASP .NETプロセスやC#コンパイラ・プロセスが起動されていることが分かります。

 図10には表示されていませんが,Webサービスがキャッシュされる様子も見えます。Webサービスのパフォーマンスを改善するために,さまざまな工夫が凝らされていることも分かります。後日お時間のあるときに,いろいろ試してみてください。

 本日は以上で終了です。次回またお会いいたしましょう。ごきげんよう!