Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装

Web サービスを作成する手順とコードを紹介します。

概要

C#でWebサービスを作成する手順を紹介します。今回作成するWebサービスは、SOAP 1.1, SOAP 1.2, HTTP POSTのインターフェイスを持つSOAPサーバー/HTTPサーバーの実装となります。

実装手順

プロジェクトの作成

ASP.NET Web アプリケーション プロジェクトを作成します。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像1

[新しい ASP.NET Web アプリケーション]ダイアログでは[空]を選択します。[Web フォーム] [MVC] [Web API]のオプションも外します。設定ができたら[OK]ボタンをクリックします。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像2

ASP.NET Web アプリケーションのプロジェクトが作成されます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像3

Webサービス(asmx)の作成

ソリューションエクスプローラーのウィンドウのプロジェクトのノードをクリックして選択します。選択状態で右クリックしポップアップメニューを表示します。メニューの[追加]の[新しい項目]サブメニューをクリックします。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像4

[新しい項目の追加]ダイアログが表示されます。左側のツリービューの[Web]のノードをクリックして選択します。下図の画面が表示されます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像5

右側の項目のリストから[Web サービス(ASMX)]の項目をクリックして選択します。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像6

ダイアログ下部の[名前]テキストボックスにasmxファイルの名称を設定します。今回は SimpleWebService.asmx とします。設定後ダイアログ右下の[追加]ボタンをクリックします。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像7

SimpleWebService.asmx ファイルが追加されます。HelloWorld()メソッドが WebMethod としてデフォルトで実装されているコードが確認できます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像8


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]のリンクをクリックします。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像9

ページ上部の[HelloWorld]リンクをクリックすると下図のページが表示されます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像10

HelloWorld WebMethodをテスト実行するための起動ボタン、SOAP 1.1 / SOAP 1.2 / HTTP POST の要求サンプルが表示されています。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像11

[起動]ボタンをクリックします。HelloWorld WebMethodを呼び出します。Webメソッドの戻り値 "Hello World" が含まれたXMLのレスポンスWebブラウザに表示されます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像12

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]のリンクをクリックします。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像13

AddQuoteメソッドのテストとSOAP HTTP POSTのサンプル画面が表示されます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像14
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像15

WebMethodのテストを実行します。テストセクションの [input]テキストボックスに入力文字列を入力します。今回は「シロクマペンギン」を入力します。入力後[起動]ボタンをクリックします。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像16

下図の画面に切り替わります。AddQuote() Webメソッドが実行され、入力文字列の前後に「"」が追加された文字列がWebメソッドの戻り値となります。Webブラウザのレスポンスに「"シロクマペンギン"」の文字列を含むXMLが返っていることが確認できます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像17


シンプルな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ブラウザが起動し、下図の画面が表示されます。ネームスペースに関するワーニングメッセージが消えたことが確認できます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像18

サーバーへの配置

サーバーのIISのドキュメントのディレクトリに配置します。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像19

インターネット インフォメーション サービス (IIS) マネージャーでサービスを配置したディレクトリをアプリケーションディレクトリとして設定ます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像20

Webサービスを配置したディレクトリにWebブラウザでアクセスします。下図の画面が表示され、Webサービスが動作していることが確認できます。
Web サービス (asmx) を作成する - asmx を利用したSOAPサーバーの実装:画像21

次の手順

プログラムからWebサービスを呼び出す方法については、こちらの記事を、非同期で呼び出す場合はこちらの記事を参照してください。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2018-05-25
Copyright © 1995–2025 iPentec all rights reserverd.