Asp.net-web-services

提供:Dev Guides
移動先:案内検索

ASP.NET-Webサービス

Webサービスは、Webアプリケーションで使用されるWebのプロトコルを使用してアクセスされるWebベースの機能です。 Webサービス開発には3つの側面があります。

  • Webサービスを作成する
  • プロキシを作成する
  • Webサービスを利用する

Webサービスを作成する

Webサービスは、基本的に他のアプリケーションで使用できるメソッドで構成されるクラスであるWebアプリケーションです。 また、ASP.NET Webページなどの分離コードアーキテクチャに従いますが、ユーザーインターフェイスはありません。

この概念を理解するために、株価情報を提供するWebサービスを作成しましょう。 クライアントは、銘柄記号に基づいて銘柄の名前と価格について照会できます。 この例を単純にするために、値は2次元配列にハードコーディングされています。 このWebサービスには3つのメソッドがあります。

  • デフォルトのHelloWorldメソッド
  • GetNameメソッド
  • GetPriceメソッド

Webサービスを作成するには、次の手順を実行します。

ステップ(1):Visual Studioで[ファイル]→ [新規]→ [Webサイト]を選択し、ASP.NET Webサービスを選択します。

ステップ(2):Service.asmxというWebサービスファイルとそのコードビハインドファイルService.csがプロジェクトのApp_Codeディレクトリに作成されます。

ステップ(3):ファイルの名前をStockService.asmxおよびStockService.csに変更します。

ステップ(4):.asmxファイルには、単にWebServiceディレクティブがあります:

<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>

ステップ(5):StockService.csファイルを開きます。生成されるコードは基本的なHello Worldサービスです。 デフォルトのWebサービスコードビハインドファイルは次のようになります。

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;

using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

using System.Xml.Linq;

namespace StockService
{
  //<summary>
  //Summary description for Service1
  //<summary>

   [WebService(Namespace = "http://tempuri.org/")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [ToolboxItem(false)]

  //To allow this Web Service to be called from script,
  //using ASP.NET AJAX, uncomment the following line.
  //[System.Web.Script.Services.ScriptService]

   public class Service1 : System.Web.Services.WebService
   {
      [WebMethod]

      public string HelloWorld()
      {
         return "Hello World";
      }
   }
}

ステップ(6):コードビハインドファイルを変更して、銘柄記号、名前、価格、および銘柄情報を取得するための2つのWebメソッドの文字列の2次元配列を追加します。

using System;
using System.Linq;

using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

using System.Xml.Linq;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

//To allow this Web Service to be called from script,
//using ASP.NET AJAX, uncomment the following line.
//[System.Web.Script.Services.ScriptService]

public class StockService : System.Web.Services.WebService
{
   public StockService () {
     //Uncomment the following if using designed components
     //InitializeComponent();
   }

   string[,] stocks =
   {
      {"RELIND", "Reliance Industries", "1060.15"},
      {"ICICI", "ICICI Bank", "911.55"},
      {"JSW", "JSW Steel", "1201.25"},
      {"WIPRO", "Wipro Limited", "1194.65"},
      {"SATYAM", "Satyam Computers", "91.10"}
   };

   [WebMethod]
   public string HelloWorld() {
      return "Hello World";
   }

   [WebMethod]
   public double GetPrice(string symbol)
   {
     //it takes the symbol as parameter and returns price
      for (int i = 0; i < stocks.GetLength(0); i++)
      {
         if (String.Compare(symbol, stocks[i, 0], true) == 0)
         return Convert.ToDouble(stocks[i, 2]);
      }

      return 0;
   }

   [WebMethod]
   public string GetName(string symbol)
   {
     //It takes the symbol as parameter and
     //returns name of the stock
      for (int i = 0; i < stocks.GetLength(0); i++)
      {
         if (String.Compare(symbol, stocks[i, 0], true) == 0)
         return stocks[i, 1];
      }

      return "Stock Not Found";
   }
}

ステップ(7):Webサービスアプリケーションを実行すると、Webサービスのテストページが表示され、サービスメソッドをテストできます。

ストックサービス

ステップ(8):メソッド名をクリックして、正しく実行されるかどうかを確認します。

名前を取得

ステップ(9):GetNameメソッドをテストするために、銘柄記号の1つを指定します。銘柄記号はハードコードされており、銘柄の名前を返します

株式の名前

Webサービスを利用する

Webサービスを使用するには、同じソリューションの下にWebサイトを作成します。 これは、ソリューションエクスプローラーでソリューション名を右クリックすることで実行できます。 Webサービスを呼び出すWebページには、返された結果を表示するラベルコントロールと、ポストバック用とサービス呼び出し用の2つのボタンコントロールが必要です。

Webアプリケーションのコンテンツファイルは次のとおりです。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

   <head runat="server">
      <title>
         Untitled Page
      </title>
   </head>

   <body>

      <form id="form1" runat="server">
         <div>

            <h3>Using the Stock Service</h3>

            <br/> <br/>

            <asp:Label ID="lblmessage" runat="server"></asp:Label>

            <br/> <br/>

            <asp:Button ID="btnpostback" runat="server" onclick="Button1_Click" Text="Post Back" style="width:132px"/>
               
            <asp:Button ID="btnservice" runat="server" onclick="btnservice_Click"  Text="Get Stock" style="width:99px"/>

         </div>
      </form>

   </body>
</html>

Webアプリケーションのコードビハインドファイルは次のとおりです。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

//this is the proxy
using localhost;

namespace wsclient
{
   public partial class _Default : System.Web.UI.Page
   {
      protected void Page_Load(object sender, EventArgs e)
      {
         if (!IsPostBack)
         {
            lblmessage.Text = "First Loading Time: " +  DateTime.Now.ToLongTimeString
         }
         else
         {
            lblmessage.Text = "PostBack at: " + DateTime.Now.ToLongTimeString();
         }
      }

      protected void btnservice_Click(object sender, EventArgs e)
      {
         StockService proxy = new StockService();
         lblmessage.Text = String.Format("Current SATYAM Price:{0}",
         proxy.GetPrice("SATYAM").ToString());
      }
   }
}

プロキシを作成する

プロキシは、Webサービスコードの代役です。 Webサービスを使用する前に、プロキシを作成する必要があります。 プロキシはクライアントアプリケーションに登録されます。 次に、クライアントアプリケーションは、ローカルメソッドを使用していたようにWebサービスを呼び出します。

プロキシは呼び出しを受け取り、適切な形式でラップして、SOAP要求としてサーバーに送信します。 SOAPはSimple Object Access Protocolの略です。 このプロトコルは、Webサービスデータの交換に使用されます。

サーバーがSOAPパッケージをクライアントに返すと、プロキシはすべてをデコードし、クライアントアプリケーションに提示します。

btnservice_Clickを使用してWebサービスを呼び出す前に、Web参照をアプリケーションに追加する必要があります。 これにより、プロキシクラスが透過的に作成され、btnservice_Clickイベントで使用されます。

protected void btnservice_Click(object sender, EventArgs e)
{
   StockService proxy = new StockService();
   lblmessage.Text = String.Format("Current SATYAM Price: {0}",
   proxy.GetPrice("SATYAM").ToString());
}

プロキシを作成するには、次の手順を実行します。

ステップ(1):ソリューションエクスプローラーでWebアプリケーションエントリを右クリックし、[Web参照の追加]をクリックします。

Web参照の追加

ステップ(2):[このソリューションのWebサービス]を選択します。 StockService参照を返します。

Webサービスの選択

ステップ(3):サービスをクリックすると、テストWebページが開きます。 デフォルトでは、作成されたプロキシは「localhost」と呼ばれ、名前を変更できます。 [参照の追加]をクリックして、クライアントアプリケーションにプロキシを追加します。

ストックサービス2

以下を追加して、コードビハインドファイルにプロキシを含めます。

 using localhost;