方法 : WebMethod 属性を使用する
更新 : 2007 年 11 月
Public メソッドに WebMethod 属性を割り当てることにより、そのメソッドが XML Web サービスの一部として公開されるようになります。また、この属性のプロパティを使用して、XML Web サービス メソッドの動作をさらに細かく設定できます。詳細については、「マネージ コードを使用した XML Web サービスのコード モデル」を参照してください。
WebMethod 属性には、次のプロパティがあります。
BufferResponse
CacheDuration
Description
EnableSession
MessageName
TransactionOption
BufferResponse
WebMethod 属性の BufferResponse プロパティは、XML Web サービス メソッドに対する応答のバッファリングを有効にします。既定の設定である true に設定すると、ASP.NET は、応答をクライアントに送信する前に、応答全体をバッファリングします。バッファリングは効率が高く、ワーカー プロセスと IIS プロセスの間の通信を最小限に抑えることにより、パフォーマンスの向上に役立ちます。false に設定すると、ASP.NET は応答を 16 KB ずつバッファリングします。一般に、このプロパティを false に設定するのは、応答全体の内容を一度にメモリに格納すると問題がある場合だけです。たとえば、データベースから項目をストリーミングするコレクションをデータベースに書き戻す場合などです。指定しない場合、既定値は true です。詳細については、「BufferResponse プロパティ」を参照してください。
XML Web サービス メソッドの応答をバッファリングするには
WebMethod 属性の BufferResponse プロパティを次のように使用します。
Public Class Service1 Inherits System.Web.Services.WebService <System.Web.Services.WebMethod(BufferResponse:=False)> _ Public Function GetBigData() As DataSet 'implementation code End Function End Class
public class Service1 : System.Web.Services.WebService { [System.Web.Services.WebMethod(BufferResponse=false)] public DataSet GetBigData() { //implementation code } }
CacheDuration
WebMethod 属性の CacheDuration プロパティは、XML Web サービス メソッドに対する結果のキャッシュを有効にします。ASP.NET は、一意なパラメータ セットのそれぞれについて結果をキャッシュします。このプロパティの値は、ASP.NET が結果をキャッシュする秒数を指定します。ゼロを指定すると、結果のキャッシュが無効になります。指定しない場合、既定値はゼロです。詳細については、「CacheDuration プロパティ」を参照してください。
XML Web サービス メソッドの結果をキャッシュするには
WebMethod 属性の CacheDuration プロパティを次のように使用します。
Public Class Service1 Inherits System.Web.Services.WebService <System.Web.Services.WebMethod(CacheDuration:=60)> _ Public Function ConvertTemperature(ByVal dFahrenheit As Double) _ As Double ConvertTemperature = ((dFahrenheit - 32) * 5) / 9 End Function End Class
public class Service1 : System.Web.Services.WebService { [System.Web.Services.WebMethod(CacheDuration=60)] public double ConvertTemperature(double dFahrenheit) { return ((dFahrenheit - 32) * 5) / 9; } }
Description
WebMethod 属性の Description プロパティは、サービス ヘルプ ページに表示される XML Web サービス メソッドの説明を指定します。指定しない場合、既定値は空の文字列です。詳細については、「Description プロパティ」を参照してください。
XML Web サービス メソッドの説明を指定するには
WebMethod 属性の Description プロパティを次のように使用します。
Public Class Service1 Inherits System.Web.Services.WebService <System.Web.Services.WebMethod( _ Description:="This method converts a temperature " & _ "in degrees Fahrenheit to a temperature in degrees Celsius.")> _ Public Function ConvertTemperature(ByVal dFahrenheit As Double) _ As Double ConvertTemperature = ((dFahrenheit - 32) * 5) / 9 End Function End Class
public class Service1 : System.Web.Services.WebService { [System.Web.Services.WebMethod( Description="Converts F to C a temperature in " + "degrees Fahrenheit to a temperature in degrees Celsius.")] public double ConvertTemperature(double dFahrenheit) { return ((dFahrenheit - 32) * 5) / 9; } }
EnableSession
WebMethod 属性の EnableSession プロパティは、XML Web サービス メソッドに対してセッション状態を有効にします。セッション状態を有効にすると、XML Web サービスは、直接 HttpContext.Current.Session から、または、WebService 基本クラスを継承している場合には WebService.Session プロパティによって、セッション状態コレクションにアクセスできます。指定しない場合、既定値は false です。詳細については、「EnableSession プロパティ」を参照してください。
XML Web サービス メソッドでセッション状態を有効にするには
WebMethod 属性の EnableSession プロパティを次のように使用します。
Public Class Service1 Inherits System.Web.Services.WebService <System.Web.Services.WebMethod(EnableSession:=True)> _ Public Function ConvertTemperature(ByVal dFahrenheit As Double) _ As Double Session("Conversions") = Session("Conversions") + 1 ConvertTemperature = ((dFahrenheit - 32) * 5) / 9 End Function <System.Web.Services.WebMethod(EnableSession:=True)> _ Public Function GetNumberOfConversions() As Integer GetNumberOfConversions = Session("Conversions") End Function End Class
public class Service1 : System.Web.Services.WebService { [System.Web.Services.WebMethod(EnableSession=true)] public double ConvertTemperature(double dFahrenheit) { Session["Conversions"] = (int) Session["Conversions"] + 1; return ((dFahrenheit - 32) * 5) / 9; } [System.Web.Services.WebMethod(EnableSession=true)] public int GetNumberOfConversions() { return (int) Session["Conversions"]; } }
MessageName
WebMethod 属性の MessageName プロパティは、XML Web サービスがエイリアスを使用して、オーバーロードされたメソッドを一意に識別できるようにします。指定しない場合、既定値はメソッド名です。MessageName を指定した場合、結果の SOAP メッセージには、実際のメソッド名の代わりにこの名前が反映されます。詳細については、「MessageName プロパティ」を参照してください。
XML Web サービス メソッドのメッセージ名を指定するには
WebMethod 属性の MessageName プロパティを次のように使用します。
Public Class Service1 Inherits System.Web.Services.WebService <System.Web.Services.WebMethod(MessageName:="AddDoubles")> _ Public Function Add(ByVal dValueOne As Double, _ ByVal dValueTwo As Double) As Double Add = dValueOne + dValueTwo End Function <System.Web.Services.WebMethod(MessageName:="AddIntegers")> _ Public Function Add(ByVal iValueOne As Integer, _ ByVal iValueTwo As Integer) As Integer Add = iValueOne + iValueTwo End Function End Class
public class Service1 : System.Web.Services.WebService { [System.Web.Services.WebMethod(MessageName="AddDoubles")] public double Add(double dValueOne, double dValueTwo) { return dValueOne + dValueTwo; } [System.Web.Services.WebMethod(MessageName="AddIntegers")] public int Add(int iValueOne, int iValueTwo) { return iValueOne + iValueTwo; } }
倍精度浮動小数点数を追加するメソッド AddDoubles に対する SOAP 要求メッセージは、次のようになります。
POST /myWebService/Service1.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/AddDoubles" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <AddDoubles xmlns="http://tempuri.org/"> <dValueOne>double</dValueOne> <dValueTwo>double</dValueTwo> </AddDoubles> </soap:Body> </soap:Envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length
倍精度浮動小数点数を追加するメソッド AddDoubles に対する SOAP 応答メッセージは、次のようになります。
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <AddDoublesResponse xmlns="http://tempuri.org/"> <AddDoublesResult>double</AddDoublesResult> </AddDoublesResponse> </soap:Body> </soap:Envelope>
TransactionOption
WebMethod 属性の TransactionOption プロパティは、XML Web サービス メソッドがトランザクションのルート オブジェクトとして動作できるようにします。TransactionOption プロパティは TransactionOption 列挙定数の任意の値に設定できますが、XML Web サービス メソッドで可能な動作は 2 つしかありません。トランザクションに関与しない (Disabled、NotSupported、Supported) か、または新しいトランザクションを作成する (Required、RequiresNew) かです。指定しない場合、既定値は TransactionOption.Disabled です。詳細については、「WebMethodAttribute.TransactionOption プロパティ」を参照してください。
XML Web サービス メソッドの必要条件に加え、System.EnterpriseServices.dll への参照を追加する必要があります。この名前空間には、COM+ サービスの分散トランザクション モデルを公開するメソッドとプロパティが含まれています。System.EnterpriseServices.ContextUtil クラスで、SetAbort メソッドまたは SetComplete メソッドを使用してトランザクションの処理を決定できます。詳細については、「ASP.NET を使用して作成した XML Web サービスでのトランザクションへの参加」および「自動トランザクションと XML Web サービス」を参照してください。
XML Web サービス メソッドで新しいトランザクションを作成するには
System.EnterpriseServices.dll への参照を追加します。詳細については、「参照の追加と削除」を参照してください。
次のようにして、System.EnterpriseServices 名前空間を XML Web サービスに追加します。
Imports System.EnterpriseServices
using System.EnterpriseServices;
WebMethod 属性の TransactionOption プロパティを次のように使用します。
Public Class Service1 Inherits System.Web.Services.WebService <System.Web.Services.WebMethod( _ TransactionOption:=TransactionOption.RequiresNew)> _ Public Function DoSomethingTransactional() As String 'The transaction was successful... ContextUtil.SetComplete DoSomethingTransactional = ContextUtil.TransactionId.ToString() End Function End Class
public class Service1 : System.Web.Services.WebService { [System.Web.Services.WebMethod( TransactionOption=TransactionOption.RequiresNew)] public string DoSomethingTransactional() { // The transaction was successful... ContextUtil.SetComplete(); return ContextUtil.TransactionId.ToString(); } }