豊田 孝

 私たちはこれまでの連載を通して,次のような5つの技術項目を学習してきました。

  • .NETフレームワーク
  • Visual Studio .NET
  • Webサービス・プログラミング
  • Webサービス・クラスとクラス継承
  • 標準プロトコル

 これら5項目を眺めてみると,“オブジェクト指向と標準プロトコルの関係”を理解することが大切であることが分かります。

 前回前々回では,オブジェクト指向の中心概念であるクラスとWebサービスの関係を取り上げました。今回は,WebサービスとWeb Service Description Language(WSDL)の関係を手短に整理し,前回触れたWebServiceクラスの役割を確認することにします。

図1●Webサービス・サンプル・プログラムのWSDL定義の一部

WebサービスとWSDLの関係

 Webサービスは“インターネットに公開されるクラス”という意味を持っていますから,インターネットの中では標準言語であるWSDLで表現される必要があります。それではここで,図1[拡大表示]のような情報を見ていただきましょう。

 この情報は,今回用意したWebサービス・サンプル・プログラムのWSDL定義の一部です。C#版サンプル・プログラムでは,No7ServiceCSという名前のクラスをWebサービスとして公開していますが,オブジェクト指向の概念であるNo7ServiceCSクラスは次のように定義されています。

“No7ServiceCSクラスは,3つのポート(port)を持つWebサービスである”

 クラスの属性と操作は“ポート(port)”という概念で抽象化されていることが分かります。ポートとは,Webサービス利用者側からの要求信号と,その要求に対するWebサービス側からの応答信号の出入り口です。W3CはこのようなポートをインターネットのEndpoint(端点)と位置付けています。図1に示したように,ポートはインターネットの通信端点であることもあり,接続情報(binding)とアドレス情報(address location)を持っています。

 より詳細を知りたい方は,W3Cサイトで公開している基本アーキテクチャ情報を一読するとよいでしょう。念のために申し上げておきますが,英文で記述されているとはいえ,決して難しい内容ではありません。Port,Type,Binding,Operation,Messageなどの用語の意味が平易に解説されています。

 それでは次に,WebServiceクラスの意味を考えてみましょう。

WebServiceクラスとは何か?

 マイクロソフトのVisual Studio .NET開発環境は,Webサービスを開発するときに,WebServiceクラスから目的のWebサービス・クラスを作成することを薦めています。結論を先に言うと,WebServiceクラスはWSDLサービスの定義に影響を与えません。つまり,WebServiceクラスは業界標準言語であるWSDLと関係がありません。それではなぜ,MicrosoftはWebServiceクラスの継承を薦めているのでしょうか?

図2●WebServiceクラスを継承したプロパティ
 前回説明したように,WebServiceクラスを継承する方向で目的のWebサービス・クラスを作成すると,プロパティやメソッドの数が増えます。今回は,プロパティのみに焦点を当て,WebServiceクラス継承の意味を考えてみます。図2[拡大表示]の情報をご覧ください。

 この情報では,WebServiceクラスを継承した8種類のプロパティのうち,比較的簡単に利用できると思われる5つのプロパティに赤丸を付けています。例えば,上から2番目のContextというプロパティは,次のように定義されています。

System.Web.HttpContext Context

この定義情報は,次のような意味を持っています。

“Contextプロパティは,System.Web名前空間にあるHttpContextクラスへの参照情報を記憶している”

この意味が分かれば,プログラム内でContextプロパティを使用するのは簡単です。サンプル・プログラム内では,リスト1リスト2のように使用しています(ダウンロードはこちら)。

リスト1●Visual C# .NET版コード
[WebMethodAttribute(BufferResponse=true,CacheDuration = 5,
Description="Display User Agent Info",
MessageName = "TryIt!")]
 public String MyWebService()
 {
  HttpContext hc = Context;
  HttpRequest hr = hc.Request;
  String ua = hr.UserAgent;
  String retStr = String.Concat("User Agent is: ",ua);
  return retStr;
 }

リスト2●Visual Basic .NET版コード
Description:= "Display User Agent Info",MessageName:="TryIt!")> _
 Public Function MyWebService() As String
  Dim hc As HttpContext = Context
  Dim hr As HttpRequest = hc.Request
  Dim ua as String = hr.UserAgent
  Dim retstr As String = String.Concat("User Agent is: ", ua)
  Return retStr
 End Function

 ご覧のように,HttpContextクラスはフレームワーク・クラス・ライブラリのSystem.Web名前空間に含まれるクラスの1つですから,その使い方は2つのプログラミング言語間で大きな違いはありません。最初のうちはこのサンプル・プログラムのように,素直にコードを記述していけば,自然とプログラムが完成します。さらに経験を積めば,より単純な記述が可能となります。

 「WebServiceクラスとはいったい何なのか?」の回答を一言で表すと,Webサービス利用者を管理すること,といってよいでしょう。WebServiceAttributeとWebMethodAttributeクラスと異なり,WebServiceクラスは,WSDL定義と直接的な関係はありません。このクラスは,あくまでも,IIS/ASP .NET基盤を活用し,例えば,将来的にWebサービスの有料化を図りたいような場面で有効となる機能を提供しています。

 本日は以上で終了です。次回からは,本日作成したWebサービス・プログラムのクライアント・プログラムを開発します。WSDLやHTTP,SOAPなどの標準プロトコルとクライアント・プログラムの関係が手にとるようにわかります。

 本日はこれで失礼致します。次回またお会いいたしましょう。