Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装
Web サービスを作成する手順とコードを紹介します。
概要
C#でWebサービスを作成する手順を紹介します。今回作成するWebサービスは、SOAP 1.1, SOAP 1.2, HTTP POSTのインターフェイスを持つSOAPサーバー/HTTPサーバーの実装となります。
実装手順
プロジェクトの作成
ASP.NET Web アプリケーション プロジェクトを作成します。
[新しい ASP.NET Web アプリケーション]ダイアログでは[空]を選択します。[Web フォーム] [MVC] [Web API]のオプションも外します。設定ができたら[OK]ボタンをクリックします。
ASP.NET Web アプリケーションのプロジェクトが作成されます。
Webサービス(asmx)の作成
ソリューションエクスプローラーのウィンドウのプロジェクトのノードをクリックして選択します。選択状態で右クリックしポップアップメニューを表示します。メニューの[追加]の[新しい項目]サブメニューをクリックします。
[新しい項目の追加]ダイアログが表示されます。左側のツリービューの[Web]のノードをクリックして選択します。下図の画面が表示されます。
右側の項目のリストから[Web サービス(ASMX)]の項目をクリックして選択します。
ダイアログ下部の[名前]テキストボックスにasmxファイルの名称を設定します。今回は SimpleWebService.asmx とします。設定後ダイアログ右下の[追加]ボタンをクリックします。
SimpleWebService.asmx ファイルが追加されます。HelloWorld()メソッドが WebMethod としてデフォルトで実装されているコードが確認できます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace SimpleAsmxwebService
{
/// <summary>
/// SimpleWebService の概要の説明です
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// この Web サービスを、スクリプトから ASP.NET AJAX を使用して呼び出せるようにするには、次の行のコメントを解除します。
// [System.Web.Script.Services.ScriptService]
public class SimpleWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
プロジェクトの実行
プロジェクトを実行します。Webブラウザが開き、SimpleWebService.asmx ファイルのURLが開かれます。SimpleWebService.asmx のURLが表示されない場合は、WebブラウザのアドレスバーにSimpleWebService.asmx のURLを入力します。
SimpleWebService.asmx にアクセスできると下図のページが表示されます。
ページの上部の[HelloWorld]のリンクをクリックします。
ページ上部の[HelloWorld]リンクをクリックすると下図のページが表示されます。
HelloWorld WebMethodをテスト実行するための起動ボタン、SOAP 1.1 / SOAP 1.2 / HTTP POST の要求サンプルが表示されています。
[起動]ボタンをクリックします。HelloWorld WebMethodを呼び出します。Webメソッドの戻り値 "Hello World" が含まれたXMLのレスポンスWebブラウザに表示されます。
WebMethodの実装
続いて新しくWebMethodを実装します。下記のコードを記述します。AddQuoteメソッドの部分が追記されるコードです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace SimpleAsmxwebService
{
/// <summary>
/// SimpleWebService の概要の説明です
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// この Web サービスを、スクリプトから ASP.NET AJAX を使用して呼び出せるようにするには、次の行のコメントを解除します。
// [System.Web.Script.Services.ScriptService]
public class SimpleWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public string AddQuote(string input)
{
return "\"" + input + "\"";
}
}
}
解説
下記のコードが追加されたWebMethodです。WebMethodはメソッドがWebMethodであることを示すため、メソッドの線軍部分の前の行に
[WebMethod]
を記述し、メソッドにWebMethod属性を設定します。
メソッドの実装は引数で与えられた文字列の前後に「"」の記号を追加し文字列を「"」で囲む動作になります。囲まれた文字列をメソッドの戻り値として返します。
[WebMethod]
public string AddQuote(string input)
{
return "\"" + input + "\"";
}
実行結果
プロジェクトを実行します。Webブラウザーが起動し、SimpleWebService.asmx ファイルのURLが開かれます。SimpleWebService.asmx のURLが表示されない場合は、WebブラウザのアドレスバーにSimpleWebService.asmx のURLを入力します。
下図の画面が表示されます。先ほど実装したAddQuoteのリンクが追加されていることが確認できます。[AddQuote]のリンクをクリックします。
AddQuoteメソッドのテストとSOAP HTTP POSTのサンプル画面が表示されます。
WebMethodのテストを実行します。テストセクションの [input]テキストボックスに入力文字列を入力します。今回は「シロクマペンギン」を入力します。入力後[起動]ボタンをクリックします。
下図の画面に切り替わります。AddQuote() Webメソッドが実行され、入力文字列の前後に「"」が追加された文字列がWebメソッドの戻り値となります。Webブラウザのレスポンスに「"シロクマペンギン"」の文字列を含むXMLが返っていることが確認できます。
シンプルなWebサービスの実装ができました。
配置する
作成したWebサービスをIISのサーバーに配置する手順を紹介します。
ネームスペースの変更
配置前にネームスペースを変更します。SimpleWebService.asmx.cs を下記に変更します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace SimpleAsmxwebService
{
/// <summary>
/// SimpleWebService の概要の説明です
/// </summary>
[WebService(Namespace = "http://www.ipentec.com/example-service")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// この Web サービスを、スクリプトから ASP.NET AJAX を使用して呼び出せるようにするには、次の行のコメントを解除します。
// [System.Web.Script.Services.ScriptService]
public class SimpleWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public string AddQuote(string input)
{
return "\"" + input + "\"";
}
}
}
解説
WebService属性の下記のコードを変更します。
[WebService(Namespace = "http://tempuri.org/")]
今回は iPentec.comのサーバーに配置するため、下記に変更します。
[WebService(Namespace = "http://www.ipentec.com/example-service")]
実行結果
配置前にVisual Studioから実行します。Webブラウザが起動し、下図の画面が表示されます。ネームスペースに関するワーニングメッセージが消えたことが確認できます。
サーバーへの配置
サーバーのIISのドキュメントのディレクトリに配置します。
インターネット インフォメーション サービス (IIS) マネージャーでサービスを配置したディレクトリをアプリケーションディレクトリとして設定ます。
Webサービスを配置したディレクトリにWebブラウザでアクセスします。下図の画面が表示され、Webサービスが動作していることが確認できます。
次の手順
プログラムからWebサービスを呼び出す方法については、
こちらの記事を、非同期で呼び出す場合は
こちらの記事を参照してください。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用