■ASP.NET XML Webサービスを使用してみよう!

さて、今回が実践の部屋の初回になりますので、本題に入る前に今後、実践の部屋で扱っていく内容について お話したいと思います。実践の部屋では、「ClickOnceを使用して業務アプリケーションを構築する」ために 必要なプログラミング技術、(すなわち.NETの開発技術になるわけですが)を紹介していきたいと思っています。 特に私のようにWebシステムを長らくやってきたエンジニアにとっては、WindowsFormを使用したアプリケーションは未知 の世界?になると思いますので、Webとの違い(画面デザインの仕方)等についても力をいれてご紹介したい と思います。

初回の題目は「ASP.NET XML Webサービスを使用してみよう」です。 ClickOnceアプリはWebシステムとは異なり、いわゆる中間層が無い形の構成を取ることが可能です。 Webシステムでは最小構成でも「ブラウザ」−「Webサーバー(Webアプリサーバー)」−「DBサーバー」 の構成をとる必要がありました。しかし、ClickOnceアプリでは「ClickOnceアプリ」−「DBサーバー」という 構成を取ることが可能になります。しかし、この場合、DBサーバーのポートを全クライアントに向けて 開いておく必要がある為、情報の保護という観点から見るとかなり危険です。この点から、ClickOnceアプリでも Webのように少なくとも3つの階層を持つことが望ましいと思います。つまりWebシステムで「ブラウザ」が担っていた 部分を「ClickOnceアプリ」を置き換えて、「ClickOnceアプリ」-「アプリケーションサーバー」−「DBサーバー」 といった構成にするのです。

この構成をとった場合、「ClickOnceアプリ」と「アプリケーションサーバ」との間で、なんらかの手段を使って 通信を行う必要がでてきます。.NETではこのようなケースでリモート処理を行う手段が豊富に提供されています。 今回はその中の一つのASP.NETのWebサービスを使用する場合の、プログラミングを解説していきたいと思います。 他のリモート処理のオプションとの比較等は今後、行っていきたいと思います。

今回、作成するアプリケーションは、クライアント側のテキストボックスに入力された文字列を サーバー側に送信し、サーバー側で、その文字列の前に「Hello!」という文字列を付けて、 クライアントに戻すというものです。

ClickOnceアプリは「Visual C# 2005 Express Edition Beta 」で作成し、Webサービスは「Microsoft .NET Framework SDK v2.0」 で作成します。(CodeBehindにしない場合は必要ありません。) まずはWebサービスの方から作成していきます。ASP.NETではWebサービスは、「asmx」という拡張子という が付いたファイルに記述します。以下が今回作成したWebサービスのソースです。

「SampleService.asmx」
1: <%@ WebService Language="c#" Class="ClickOnceService.EmployeeService" %>
2: using System;
3: using System.Web.Services;
4:
5: namespace ClickOnceService
6: {
7:	public class SampleService : WebService
8:	{
9:		[WebMethod]
10:		public string Hello(string userName)
11:		{
12:			return "Hello! " + userName;
13:		}
14:	}
15: }

それではソースの方を見ていきます。1行目はWebサービスを作成するためのおまじないです。 Language属性には、今回使用する言語である「C#」を、Class属性にはWebサービスのクラス名を 記述します。

5行目以降がWebサービスのクラスの記述になりますが、ポイントが2点にあります。 まず1つは、System.Web.Services.WebServiceクラスを継承する点です。これはASP.NETで Webサービスを作成するためのお約束事項です。
2つめのポイントは、クライアント側から呼び出されるメソッドに[WebMethod]属性を 追加する点です。
これで、Webサービス側のプログラム作成は終了です。 このファイルをIISの仮想ディレクトリに配置すれば、サーバー側の作業は全て完了です。 次にクライアント側に移っていきたいと思います。

クライアント側での最初の作業は「Web参照」を追加する事です。 以下がでWeb参照を追加するための画面です。

URLに先ほど作成した[SampleService.asmx]が置かれている場所を指定します。 すると「このURLで見つかったWebサービス」欄にSampleServiceが表示されます。 パッケージ名になるWeb参照名を入力して、「Web参照の追加」をクリックします。
「クラスビュー」を見ると、SampleServiceが追加されている事を確認できます。

さて、ここまでくれば後は簡単です。 以下のようにしてSampleServiceクラスのメソッド「Hello」を呼び出して下さい。

        private void sendButton_Click(object sender, EventArgs e)
        {
            SampleService service = new SampleService();
            String result = service.Hello(nameText.Text);

            MessageBox.Show(result);
        }

HOMEへ