次の方法で共有


XML Web サービスの宣言

ASP.NET で XML Web サービスを作成する場合は、.asmx ファイル名拡張子を付けたテキスト ファイルの先頭に、必須の @ WebService ディレクティブを配置します。.asmx ファイルが存在し、その先頭に @ WebService ディレクティブが指定されていると、XML Web サービスの URL アドレスがその実装に関連付けられます。次に、XML Web サービスのクライアントが参照できるメソッドとデータ型を定義する XML Web サービス クラスを実装します。最後に、XML Web サービスの要求を処理して応答を返信するために、定義した XML Web サービス メソッドに XML Web サービス ロジックを追加します。XML Web サービス クラスは直接 .asmx ファイルで定義することも、個別のファイルで定義することもできます。個別のファイルを使用する場合、そのファイルをコンパイルしてアセンブリを生成する必要があります。また、必要に応じて、XML Web サービスを実装するクラスに WebService 属性を適用することもできます。XML Web サービスを実装するクラスを WebService クラスから派生させることも可能です。

同じファイル内に実装が存在する XML Web サービスを宣言するには

  • @ WebService ディレクティブを .asmx 拡張子が付いたファイルの先頭に追加し、XML Web サービスを実装するクラスと、実装で使用するプログラミング言語を指定します。

    Class 属性には、@ WebService ディレクティブと同じアセンブリにあるクラス、または個別のアセンブリ内のクラスを設定できます。クラスが別のアセンブリ内に存在する場合、そのアセンブリは、XML Web サービスが存在する Web アプリケーション下の \Bin ディレクトリに配置されている必要があります。Language 属性には、C#VB、および JS (それぞれ、C#、Visual Basic .NET、および JScript .NET を示す) を設定できます。

    @ WebService ディレクティブの Language 属性を C# に、Class 属性を同じファイル内にある MyMath に設定するコード例を次に示します。

    <%@ WebService Language="C#" Class="MyMath" %>
    using System.Web.Services;
    public class MyMath {
         [ WebMethod ]
         public int Add(int num1, int num2) {
              return num1+num2;
         }
    }
    

アセンブリ内に実装が存在する XML Web サービスを宣言するには

  • @ WebService ディレクティブを .asmx 拡張子が付いたファイルの先頭に追加し、XML Web サービスを実装するクラス、実装を含むアセンブリ、および実装で使用するプログラミング言語を指定します。

    次の @ WebService ディレクティブは .asmx 拡張子が付いたファイル内の唯一の行であり、MyName.MyWebService クラスが、XML Web サービスを管理する Web アプリケーションの \Bin ディレクトリ内の MyAssembly アセンブリに配置されていることを示しています。

    <%@ WebService Language="C#" Class="MyName.MyWebService,MyAssembly" %>
    [Visual Basic]
    <%@ WebService Language="VB" Class="MyName.MyWebService,MyAssembly" %>
    

    ****メモ   @ WebService ディレクティブ内でアセンブリを指定しない場合、ASP.NET では、XML Web サービスへの初回アクセス時に、その XML Web サービスを管理する Web アプリケーションの \Bin ディレクトリ内にあるアセンブリのリスト全体を検索します。したがって、アセンブリ名を指定すると、初回アクセス時のパフォーマンスを向上させることができます。

WebService 属性の適用

オプションの WebService 属性を、XML Web サービスを実装するクラスに適用することによって、XML Web サービスの既定の XML 名前空間と、XML Web サービスを説明する文字列を設定できます。

XML Web サービスを公開する前に、既定の名前空間 http://tempuri.org を変更することを強くお勧めします。この変更は、公開する XML Web サービスを、名前空間が誤って既定 (<http://tempuri.org/>) のままになっている可能性のある他の XML Web サービスと区別する必要があるため重要です。

XML Web サービスがメンバである XML 名前空間を設定するには

  • WebService 属性を XML Web サービスを実装するクラスに適用し、その Namespace プロパティを設定します。

XML 名前空間を https://www.contoso.com/ に設定するコード例を次に示します。

<%@ WebService Language="C#" Class="Math" Debug=true%>
using System.Web.Services;
using System;

[WebService(Namespace="https://www.contoso.com/")]
public class Math {
     [ WebMethod ]
     public int Add(int num1, int num2) {
         return num1+num2;
         }
 }
[Visual Basic]
<%@ WebService Language="VB" Class="Math"%>
Imports System.Web.Services
Imports System

<WebService(Namespace:="https://www.contoso.com/")> _
Public Class Math
  <WebMethod()> _
   Public Function Add(num1 As Integer, num2 As Integer) _
                   As Integer
        Return num1 + num2
    End Function 
End Class 

WebService クラスからの派生

オプションとして、ASP.NET を使用して作成した XML Web サービスを実装するクラスを WebService クラスから派生させて、ApplicationSessionUserContext などの共通 ASP.NET オブジェクトにアクセスできます。Application プロパティと Session プロパティにより、Web アプリケーションまたは特定のセッションの有効期間全体にわたって状態情報にアクセスし、その状態を格納および取得できます。状態管理の詳細については、「ASP.NET を使用して作成した XML Web サービスでの状態管理」を参照してください。認証が有効な場合、User プロパティに XML Web サービスの呼び出し元の ID が格納されます。この ID を使用して、XML Web サービスは要求が認証されているかどうかを判断できます。認証の詳細については、「ASP.NET を使用して作成した XML Web サービスのセキュリティ」を参照してください。Context プロパティにより、XML Web サービスのクライアントの要求に関する HTTP 固有のすべての情報にアクセスできます。Context プロパティの詳細については、「Context プロパティ」を参照してください。

Context プロパティを使用してサーバーでの要求時間を取得するコード例を次に示します。

<%@ WebService Language="C#" Class="Util" %>
using System;
using System.Web.Services;

public class Util: WebService {
   [ WebMethod(Description="Returns the time as stored on the Server",
               EnableSession=false)]
   public string Time() 
   {
      return Context.Timestamp.TimeOfDay.ToString();
   }
 } 
[Visual Basic]
<%@ WebService Language="VB" Class="Util" %>
Imports System
Imports System.Web.Services

Public Class Util
   Inherits WebService
   
   <WebMethod(Description := "Returns the time as stored on the Server", _
              EnableSession := False)> _
   Public Function Time() As String
        Return Context.Timestamp.TimeOfDay.ToString()
   End Function
End Class

参照

XML Web サービス メソッドの定義 | ASP.NET を使用した XML Web サービスの作成 | ASP.NET を使用した XML Web サービスの作成の概要