マネージ コードを使用した Web サービスのコード モデル

更新 : 2007 年 11 月

Web サービスは、2 つの部分から構成されます。1 つは、Web サービスのエントリ ポイントであり、もう 1 つは、Web サービスの機能を実装するコードです。asmx ファイルは、ASP.NET で Web サービスの指定可能なエントリ ポイントとして機能するテキスト ファイルです。このファイルは、コンパイル前のアセンブリのコード、分離コード ファイル、または .asmx ファイル自体に含まれるコードを参照します。

68zt3df9.alert_note(ja-jp,VS.90).gifメモ :

コードが直接 .asmx ファイルに含まれている場合、ASP.NET はそのコードをサーバー上で要求に応じてコンパイルします。

.asmx ファイルの先頭にある WebService 処理ディレクティブによって、Web サービスの実装が存在する場所が指定されます。既定では、ASP.NET Web サービス プロジェクトのテンプレートを使用して Web サービスを作成する場合、Visual Studio は Service1.asmx.vb または Service1.asmx.cs などの分離コード ファイルを使用します。

68zt3df9.alert_note(ja-jp,VS.90).gifメモ :

Visual Studio は、異なる言語にまたがるコンパイルをサポートしていません。たとえば、Visual Basic の ASP.NET Web アプリケーション プロジェクトに Visual C# の Web サービスを含めたり、Visual C# の ASP.NET Web アプリケーション プロジェクトに Visual Basic の Web サービスを含めたりはできません。

マネージ コードを使用した Web サービスを構築する場合、ASP.NET は自動的にインフラストラクチャを提供し、SOAP メッセージの解析と作成を含む、Web サービスの要求と応答の処理を行います。

WebService 処理ディレクティブ

.asmx ページの先頭には、WebService 処理ディレクティブがあります。このディレクティブには、Web サービスの実装に関する情報が属性の形で含まれています。この処理ディレクティブは、Web サービス機能を実装するクラスなど、ASP.NET 環境に必要な情報を提供します。WebService 処理ディレクティブの例を次に示します。

[Visual Basic]
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb"
    Class="WebService1.Service1" %>


[C#]
<%@ WebService Language="c#" Codebehind="Service1.asmx.cs"
    Class="WebService1.Service1" %>

Language 属性は、Web サービスの開発に使用されるプログラミング言語を示します。Web サービスは、Visual Basic .NET や Visual C# など、任意の .NET 互換言語で作成できます。

Visual Studio .NET でマネージ コードを使用した Web サービスを作成する場合、Web サービスの実装は、分離コード ファイルに格納されます。分離コード ファイルは、Codebehind 属性を使用して .asmx ページに関連付けられます。

68zt3df9.alert_note(ja-jp,VS.90).gifメモ :

この属性は Visual Studio が Web サービス プロジェクトを管理するためのものであり、実行時には必要ありません。

ASP.NET Web サービス プロジェクトのテンプレートを使用すると、分離コード ファイル内で Web サービスの機能を実装するクラスが Class 属性に示されます。

ASP.NET Web サービス プロジェクトのテンプレートを使用すると、Visual Studio .NET は .asmx ファイルにこの処理ディレクティブを自動的に挿入します。

68zt3df9.alert_note(ja-jp,VS.90).gifヒント :

クラスの名前を変更する場合は、WebService ディレクティブの Class 属性で必ずクラス名を変更してください。

68zt3df9.alert_note(ja-jp,VS.90).gifメモ :

.asmx ファイルの内容を表示するには、ソリューション エクスプローラで .asmx ファイルを右クリックし、ショートカット メニューの [ファイルを開くアプリケーションの選択] をクリックします。[ファイルを開くアプリケーションの選択] ダイアログ ボックスで、[ソース コード (テキスト) エディタ] をクリックし、[開く] をクリックします。

詳細については、「チュートリアル : ASP.NET を使用する基本的な XML Web サービスの構築」を参照してください。

System.Web.Services.WebService クラス

Web サービスに対するオプションの基本クラスを定義する System.Web.Services.WebService クラスを使用することにより、アプリケーション状態オブジェクトやセッション状態オブジェクトなどの一般的な ASP.NET オブジェクトに直接アクセスできます。Visual Studio でマネージ コードを使用して作成された Web サービスは、既定でこのクラスを継承します。Web サービスは、このクラスからの継承により、Request や Session などの ASP.NET の組み込みオブジェクトにアクセスできます。詳細については、「WebService クラス」を参照してください。

このクラスを継承しない場合、Web サービスは、System.Web.HttpContext.Current から ASP.NET の組み込みオブジェクトにアクセスできます。Web サービスを実装するクラスはパブリックである必要があり、パブリックな既定のコンストラクタ (パラメータのないコンストラクタ) を持つ必要があります。これにより、ASP.NET は受け取った Web サービス要求を処理する Web サービス クラスのインスタンスを作成できます。詳細については、「Current プロパティ」を参照してください。

[Visual Basic]
Imports System.Web.Services
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
using System.Web.Services;
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

詳細については、「WebService クラスの継承」を参照してください。

WebService 属性

各 Web サービスには、固有の名前空間が必要です。それにより、クライアント アプリケーションは、同じメソッド名を使用する Web サービスを区別できます。Visual Studio .NET で作成される既定の名前空間は、"http://tempuri.org/WebService1/Service1" です。ここで、WebService1 はプロジェクト名、Service1 はクラス名です。この名前空間は標準的な URL に似ていますが、これを Web ブラウザで表示できるとは考えないでください。これは単なる一意な識別子です。

68zt3df9.alert_note(ja-jp,VS.90).gifメモ :

Web サービスに関する情報を含む Web ページをその場所に用意することもできます。

WebService 属性を使用することにより、名前空間を指定し、Web サービスの簡単な説明を付加できます。この簡単な説明は、ブラウザからクエリ文字列を指定せずに Web サービスを呼び出したときに、サービス ヘルプ ページに表示されます。

[Visual Basic]
<System.Web.Services.WebService( _ 
   Namespace:="http://tempuri.org/WebService1/Service1", _ 
   Description:="A short description of the Web service.")> _
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
[System.Web.Services.WebService( 
   Namespace="http://tempuri.org/WebService1/Service1",  
   Description="A short description of the Web service.")] 
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

詳細については、「WebServiceAttribute クラス」および「WebService 属性の使用」を参照してください。

WebMethod 属性の適用

Web サービスの一部としてメソッドを公開するには、公開する各パブリック メソッドの宣言の前に WebMethod 属性を配置する必要があります。詳細については、「方法 : Web サービス メソッドを作成する」を参照してください。

[Visual Basic]
<System.Web.Services.WebMethod()> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod()] 
public string MyString(string x) 
{
   //implementation code
}

WebMethod 属性には、Web サービスの動作を設定するためのいくつかのプロパティが含まれています。詳細については、「WebMethodAttribute クラス」および「WebMethod 属性の使用」を参照してください。たとえば、この属性を使用して、関連するサービス ヘルプ ページに表示する簡単な説明を追加できます。

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.")> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.")] 
public string MyString(string x) 
{
   // Implementation code.
}

複数のプロパティを指定するときは、コンマで区切ります。たとえば、説明を追加し、さらに、Web サービスの結果を 60 秒間キャッシュするには、次のように指定します。

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.", _ 
           CacheDuration:=60)> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.", 
   CacheDuration=60)] 
public string MyString(string x) 
{
   // Implementation code.
}

概要

各 Web サービスは、.asmx ファイルと Web サービス クラスによって構成されます。.asmx ファイルには、クラスを参照する WebService 処理ディレクティブが含まれています。Web サービス クラスはパブリックであり、パブリックな既定のコンストラクタを持ち、WebMethod 属性が指定された 1 つ以上のパブリック メソッドを含んでいます。プロジェクト、クラス、そのメソッド、および Web サービスの結果の関係を次の図に示します。

WebService のクラスと結果の項目
Web サービス プロジェクト配置項目

参照

概念

マネージ コードを使用した Web サービスへのアクセスのコード モデル

その他の技術情報

マネージ コードを使用した Web サービスの作成