Webサービス-例

Webサービスアーキテクチャに基づいて、Webサービス実装の一部として次の2つのコンポーネントを作成します-

サービスプロバイダーまたはパブリッシャー

これはWebサービスのプロバイダーです。サービスプロバイダーはサービスを実装し、インターネットまたはイントラネットで利用できるようにします。

.NET SDKを使用して、簡単なWebサービスを作成して公開します。

サービスリクエスターまたはコンシューマー

これは、Webサービスのあらゆる利用者です。リクエスターは、ネットワーク接続を開いてXML要求を送信することにより、既存のWebサービスを利用します。

また、2つのWebサービスリクエスターを作成します。1つはWebベースのコンシューマー(ASP.NETアプリケーション)で、もう1つはWindowsアプリケーションベースのコンシューマーです。

以下に示すのは、サービスプロバイダーとして機能し、アプリケーションで使用されるWebサービスとして2つのメソッド(addとSayHello)を公開する最初のWebサービスの例です。これは、Webサービスの標準テンプレートです。.NET Webサービスは、.asmx拡張子を使用します。Webサービスとして公開されているメソッドにはWebMethod属性があることに注意してください。このファイルをFirstService.asmxとしてIIS仮想ディレクトリに保存します(IISの構成で説明されているように、たとえばc:\ MyWebSerces)。

FirstService.asmx
<%@ WebService language = "C#" class = "FirstService" %>

using System;
using System.Web.Services;
using System.Xml.Serialization;

[WebService(Namespace = "http://localhost/MyWebServices/")]
public class FirstService : WebService{
   [WebMethod]
   public int Add(int a, int b) {
      return a + b;
   }

   [WebMethod]
   public String SayHello() {
      return "Hello World";
   }
}

Webサービスをテストするには、公開する必要があります。Webサービスは、イントラネットまたはインターネットのいずれかで公開できます。このWebサービスは、ローカルマシンで実行されているIISで公開します。IISの構成から始めましょう。

  • [スタート]→[設定]→[コントロールパネル]→[管理ツール]→[インターネットサービスマネージャー]を開きます。

  • デフォルトのWebサイトを展開して右クリックします。[新規]を選択します&#rarr; 仮想ディレクトリ。仮想ディレクトリ作成ウィザードが開きます。[次へ]をクリックします。

  • 「仮想ディレクトリエイリアス」画面が開きます。仮想ディレクトリ名を入力します。たとえば、MyWebServicesです。[次へ]をクリックします。

  • 「Webサイトコンテンツディレクトリ」画面が開きます。

  • 仮想ディレクトリのディレクトリパス名を入力します。たとえば、c:\ MyWebServicesです。[次へ]をクリックします。

  • 「アクセス許可」画面が開きます。要件に応じて設定を変更します。この演習のデフォルト設定を維持しましょう。

  • [次へ]ボタンをクリックします。IISの構成が完了します。

  • [完了]をクリックして構成を完了します。

IISが正しく構成されているかどうかをテストするには、上記で作成した仮想ディレクトリ(C:\ MyWebServices)にHTMLファイル(x.htmlなど)をコピーします。次に、InternetExplorerを開いて次のように入力しますhttp://localhost/MyWebServices/x.html。x.htmlファイルを開く必要があります。

Note−それが機能しない場合は、ローカルホストをマシンのIPアドレスに置き換えてみてください。それでも機能しない場合は、IISが実行されているかどうかを確認してください。IISと仮想ディレクトリを再構成する必要がある場合があります。

このWebサービスをテストするには、上記で作成したIIS仮想ディレクトリ(C:\ MyWebServices)にFirstService.asmxをコピーします。Internet Explorer(http://localhost/MyWebServices/FirstService.asmx)でWebサービスを開きます。Webサービスページが開きます。このページには、アプリケーションによってWebサービスとして公開される2つのメソッドへのリンクが含まれている必要があります。おめでとう!あなたはあなたの最初のウェブサービスを書きました!

Webサービスのテスト

これまで見てきたように、.NETFrameworkではWebサービスの作成は簡単です。.NET Frameworkでは、Webサービスコンシューマーの作成も簡単です。ただし、もう少し複雑です。前述のように、2種類のサービスコンシューマーを作成します。1つはWebベースのコンシューマーで、もう1つはWindowsアプリケーションベースのコンシューマーです。最初のWebサービスコンシューマーを作成しましょう。

Webベースのサービスコンシューマー

以下に示すように、Webベースのコンシューマーを作成します。それをWebApp.aspxと呼びます。これはASP.NETアプリケーションであることに注意してください。これをWebサービスの仮想ディレクトリ(c:\ MyWebServices \ WebApp.axpx)に保存します。

このアプリケーションには、追加するユーザーから番号を取得するために使用される2つのテキストフィールドがあります。実行ボタンが1つあり、クリックするとAddおよびSayHelloWebサービスを取得します。

WebApp.aspx
<%@ Page Language = "C#" %>
<script runat = "server">
   void runSrvice_Click(Object sender, EventArgs e) {
      FirstService mySvc = new FirstService();
      Label1.Text = mySvc.SayHello();
      Label2.Text = mySvc.Add(Int32.Parse(txtNum1.Text),  Int32.Parse(txtNum2.Text)).ToString();
   }
</script>

<html>
   <head> </head>
   
   <body>
      <form runat = "server">
         <p>
            <em>First Number to Add </em>:
            <asp:TextBox id = "txtNum1" runat = "server" Width = "43px">4<  /asp:TextBox>
         </p>
			
         <p>
            <em>Second Number To Add </em>:
            <asp:TextBox id = "txtNum2" runat = "server" Width = "44px">5</asp:TextBox>
         </p>
			
         <p>
            <strong><u>Web Service Result -</u></strong>
         </p>
			
         <p>
            <em>Hello world Service</em> :
            <asp:Label id = "Label1" runat = "server" Font-Underline = "True">Label< /asp:Label>
         </p>

         <p>
            <em>Add Service</em> :
            & <asp:Label id = "Label2" runat = "server" Font-Underline = "True">Label</asp:Label>
         </p>
			
         <p align = "left">
            <asp:Button id = "runSrvice" onclick = "runSrvice_Click" runat = "server" Text = "Execute"></asp:Button>
         </p>
      </form>
   </body>
</html>

コンシューマーを作成したら、消費するWebサービスのプロキシを作成する必要があります。この作業は、追加されたWebサービスを参照するときに、Visual Studio.NETによって自動的に実行されます。従うべき手順は次のとおりです-

  • 使用するWebサービスのプロキシを作成します。プロキシは、.NETSDKに付属のWSDLユーティリティを使用して作成されます。このユーティリティは、Webサービスから情報を抽出し、プロキシを作成します。プロキシは特定のWebサービスに対してのみ有効です。他のWebサービスを利用する必要がある場合は、このサービスのプロキシも作成する必要があります。Visual Studio .NETは、Webサービス参照が追加されると、プロキシを自動的に作成します。.NET SDKに付属のWSDLユーティリティを使用して、Webサービスのプロキシを作成します。現在のディレクトリにFirstSevice.csファイルが作成されます。Webサービス用のFirstService.dll(プロキシ)を作成するためにコンパイルする必要があります。

c:> WSDL http://localhost/MyWebServices/FirstService.asmx?WSDL
c:> csc /t:library FirstService.cs
  • コンパイルされたプロキシをWebサービスの仮想ディレクトリ(c:\ MyWebServices \ bin)のbinディレクトリに配置します。インターネットインフォメーションサービス(IIS)は、このディレクトリでプロキシを探します。

  • すでに行ったのと同じ方法で、サービスコンシューマーを作成します。Webサービスプロキシのオブジェクトはコンシューマーでインスタンス化されることに注意してください。このプロキシは、サービスとの対話を処理します。

  • IEにコンシューマーのURLを入力してテストします(たとえば、http://localhost/MyWebServices/WebApp.aspx)。

WindowsアプリケーションベースのWebサービスコンシューマー

WindowsアプリケーションベースのWebサービスコンシューマーを作成することは、他のWindowsアプリケーションを作成することと同じです。プロキシを作成し(すでに作成済み)、アプリケーションをコンパイルするときにこのプロキシを参照するだけで済みます。以下は、Webサービスを使用するWindowsアプリケーションです。このアプリケーションは、Webサービスオブジェクト(もちろんプロキシ)を作成し、SayHelloを呼び出し、その上にメソッドを追加します。

WinApp.cs

using System;
using System.IO;

namespace SvcConsumer {
   class SvcEater {
      public static void Main(String[] args) {
         FirstService mySvc = new FirstService();
         Console.WriteLine("Calling Hello World Service: " + mySvc.SayHello());
         Console.WriteLine("Calling Add(2, 3) Service: " + mySvc.Add(2, 3).ToString());
      }
   }
}

を使用してコンパイルしc:\>csc /r:FirstService.dll WinApp.csます。WinApp.exeが作成されます。それを実行して、アプリケーションとWebサービスをテストします。

ここで、疑問が生じます。このアプリケーションが実際にWebサービスを呼び出していることをどのように確認できますか?

テストは簡単です。 Webサーバーを停止して、Webサービスに接続できないようにします。次に、WinAppアプリケーションを実行します。ランタイム例外が発生します。ここで、Webサーバーを再起動します。動作するはずです。