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 としてデフォルトで実装されているコードが確認できます。


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://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メソッドの部分が追記されるコードです。
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://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 を下記に変更します。
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を愛用
掲載日: 2018-05-25
iPentec all rights reserverd.