マイクロソフト株式会社 デベロッパーマーケティング本部
デベロッパーエバンジェリスト 伊藤 英豪

最終更新日 2004 年 8 月 18 日

  このコンテンツのポイント
  • Web アプリケーションから Web サービスの利用方法について理解する。



今回紹介するコード

<Service1.asmx.vb>

Visual Basic
<WebMethod()> _
    Public Function GetCustomers() As CustDS
    Dim MyDS As New CustDS
    SqlDataAdapter1.Fill(MyDS, "Customers")
    Return MyDS
  End Function
 

<WebForm1.aspx.vb>

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles Button1.Click
    Dim MyWS As New localhost.Service1
    Dim MyDS As New localhost.CustDS
    MyDS = MyWS.GetCustomers()
    DataGrid1.DataSource = MyDS.Customers
    DataGrid1.DataBind()
  End Sub
 

 

目次
はじめに
作成するアプリケーションの概要
Web サービスの作成
Web サービス クライアントの作成
動作と解説
おわりに
補足情報

Visual C# .NET の内容はこちらに掲載しています。
10 行でズバリ !! Web アプリケーションからの Web サービスの利用 (C#)


 

はじめに

ビジネスロジックをサーバーサイドで Web サービス として実装することで、Windows フォームや Web フォーム、あるいは Office といった様々なクライアントでサーバーサイドのビジネスロジックを共有利用することが可能となります。

いわば、マルチクライアントの実現が Web サービスによって容易に実現可能になるといえます。

今回の 10 行シリーズでは、簡単な Web サービスの作成と、それを利用する Web アプリケーションの作成を通じて、Web サービスの作成や利用が Visual Studio .NET 2003 によって容易に開発できることを見ていきます。

 

作成するアプリケーションの概要

ASP.NET Web フォームが Web サービスのクライアントとなり、Web サービスが返却する顧客の一覧 (型付 DataSet として返却) を DataGrid コントロールに表示するといったものです。

 

Web サービスの作成

Web サービス自体は 『10 行でズバリ !! Windows アプリケーションからの Web サービスの利用 (VB .NET)』 で説明したものと同じものを使用します。

詳細な作成方法は前述の 『10 行でズバリ !! Windows アプリケーションからの Web サービスの利用 (VB .NET)』 をご覧下さい。

 

Web サービス クライアントの作成

Web サービス クライアント として、今回は Web アプリケーション を作成します。

ソリューション エクスプローラーでソリューションを選択し、マウス右クリックの [プロジェクトの追加] [新しいプロジェクト] を選択し、[Visual Basic プロジェクト] で、[ASP.NET Web アプリケーション] テンプレートを使用します。

図1. Web アプリケーション の選択

新しく追加された Web フォーム ("WebForm1.aspx") に、 Button コントロールと DataGrid コントロールを追加します。

図2. Web フォームのデザイン

WebClientVB のプロジェクトの参照設定をマウスで右クリックし、プルダウンメニューの [Web 参照の追加] を選択し、今回作成した Web サービス Service1 への参照を追加します。

図3. Web 参照の追加

図4. Web 参照の追加

このタイミングで、Web サービスへのあたかもローカルのクラスへのアクセスのように透過的に行うためのプロキシクラスが生成されます。プロキシクラスに関しては前回の 『 10 行でズバリ !! Web サービス カスタムデータの受け渡し (VB.NET)』 をご覧下さい。

次に、WebForm1.aspx デザイン画面の Button1 コントロールをダブルクリックし、以下の赤字で書かれているコードを記述します。

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles Button1.Click
    Dim MyWS As New localhost.Service1
    Dim MyDS As New localhost.CustDS
    MyDS = MyWS.GetCustomers()
    DataGrid1.DataSource = MyDS.Customers
    DataGrid1.DataBind()
  End Sub
 

動作と解説

Web サービス クライアントである Web アプリケーションのプロジェクトを スタートアップ プロジェクトに設定し、デバック実行します。

Web アプリケーションが起動して、ボタンをクリックします。

図5. Web アプリケーション 実行結果

Web アプリケーションのボタンをクリックした際に、Web サービスがプロキシ経由で呼び出されます。そして、型付 DataSet が XML (DiffGram 形式) にシリアライズされて、それが再び型付 DataSet にデシリアライズされて、クライアント側の DataGrid にバインドされ表示されるといった動作となります。

シリアライズ、デシリアライズに関しては、前回の 『 10 行でズバリ !! Web サービス カスタムデータの受け渡し (VB.NET)』 をご覧下さい。

 

おわりに

今回の場合は、ビジネスロジックと言うにはあまりにも単純なものでしたが、Web サービスとしてサーバーサイドのビジネスロジックを実装し、様々なユーザーインターフェイスの要件に応じて Windows フォームや Webフォームや Office といったユーザーインターフェイスを最適なものを選択し、サーバーサイドのビジネスロジックは再利用することが可能になります。ともすれば Web サービスは B2B とか EAI といった感覚を持たれている方もいらっしゃるとは思いますが、ノード (物理的なティア) が分散するときの接続手順として、あるいはマルチプラットフォームを意識したサービスとしてのソフトウェアの再利用方法として、有効に活用することが可能な技術であるといえます。

マルチ UI の実現、あるいはビジネスロジックのサービスとしての再利用のために Web サービスをご活用下さい。

 

補足情報

本稿ではただ単純に ASP.NET Web アプリケーションも Web サービスのクライアントとして容易に実装可能であるといったご紹介となります。

本来であればその妥当性を検討する必要があります。例えば、Web サービス呼び出しは通常のクラスのメソッド呼び出しに比べて性能的なオーバーヘッドがあります。したがって、プレゼンテーション層とビジネスロジック層を単一ノードに配置するようなシンプルなシステム構成の場合、Webフォームからのビジネスロジック呼び出しは Web サービスを経由せずに、直接該当クラスを呼び出します。

また、Web フォームからビジネスロジックを物理的に分離する場合でも、その接続形態は Remoting や DCOM やメッセージキュー等要件に応じて様々となり、一概に Web サービスとは限りません。

その他にも、クライアントが Windows フォームや Office といったスマート クライアント形態の場合は、クライアント側の状態の管理はクライアントサイドで行うためサーバーサイドでのリソースの負荷は軽減されますが、Web フォームが Web サービスのクライアントの場合で、スマート クライアントのような比較的多くのデータ転送を行なってしまうと、Web サーバーのメモリリソースを圧迫することに繋がります。

また、Web フォームでの DataDrid の UI では、ページング処理や単一行のデータ更新に応じた Web サービスサイドの実装が必要となるため、スマート クライアントとは若干異なるサーバーサイドロジックが Web サービスに必要となる場合もあります。

なお、本稿とは直接関係しませんが、物理的な配置パターンに関してご興味のある方は、下記を参照下さい。

.NET のアプリケーション アーキテクチャ : アプリケーションとサービスの設計
第 4 章 物理的な展開と運用上の要件


Code Recipe .NET Framework デベロッパー センター

ページのトップへ