SoapHttpClientProtocol.BeginInvoke メソッド
SOAP を使用して XML Web サービス メソッドの非同期呼び出しを開始します。
Protected Function BeginInvoke( _
ByVal methodName As String, _ ByVal parameters() As Object, _ ByVal callback As AsyncCallback, _ ByVal asyncState As Object _) As IAsyncResult
[C#]
protected IAsyncResult BeginInvoke(stringmethodName,object[] parameters,AsyncCallbackcallback,objectasyncState);
[C++]
protected: IAsyncResult* BeginInvoke(String* methodName,Object* parameters __gc[],AsyncCallback* callback,Object* asyncState);
[JScript]
protected function BeginInvoke(
methodName : String,parameters : Object[],callback : AsyncCallback,asyncState : Object) : IAsyncResult;
パラメータ
- methodName
BeginInvoke を呼び出している派生クラス内の XML Web サービス メソッドの名前。 - parameters
XML Web サービスに渡すパラメータを格納しているオブジェクトの配列。配列内の値の順序は、呼び出し元の派生クラス メソッドに渡されたパラメータの順序に対応しています。 - callback
非同期呼び出しが完了したときに呼び出されるデリゲート。 callback が null 参照 (Visual Basic では Nothing) の場合、このデリゲートは呼び出されません。 - asyncState
呼び出し元によって提供される補足情報。
戻り値
リモート メソッドの呼び出しからの戻り値を取得するために、 EndInvoke に渡される IAsyncResult 。
例外
例外の種類 | 条件 |
---|---|
SoapException | 要求はサーバー コンピュータに到達しましたが、正常に処理されませんでした。 |
解説
XML Web サービス用に独自のプロキシ クラスを構築した場合を除き、通常、 BeginInvoke メソッドを直接呼び出すことはありません。
サービスの説明から Wsdl.exe ユーティリティによって生成されたプロキシ クラスは、XML Web サービス メソッドを同期的に呼び出すためのプロキシ クラスの名前として XML Web サービス メソッドを公開します。XML Web サービス メソッドを非同期的に呼び出す場合は、各 XML Web サービス メソッドのプロキシ クラスに 2 つのメソッドが追加されます。XML Web サービス メソッドの名前に Begin
プリフィックスが付けられたメソッドと End
プリフィックスが付けられたメソッドの 2 つです。
プロキシ クラスは、 BeginInvoke メソッドを呼び出して、XML Web サービス メソッドへの非同期呼び出しを開始します。たとえば、XML Web サービスが Add
という名前の XML Web サービス メソッドを公開する場合、プロキシ クラスには、その XML Web サービス メソッドへの呼び出しを開始するための BeginAdd
という名前のメソッドが含まれます。 BeginAdd
のコードの中で、 BeginInvoke が呼び出され、その結果は強制的に Add
に対する有効な戻り値の型に変換されます。
methodName は、メソッドに追加された可能性がある SoapDocumentMethodAttribute などのカスタム属性を検索するために使用します。 SoapDocumentMethodAttribute は、SOAP プロトコルに必要な派生メソッドに関する追加情報を提供します。 asyncState は callback に渡され、 BeginInvoke から返される IAsyncResult の中に含まれています。 asyncState パラメータを使用して、結果を処理する callback パラメータに指定された、デリゲートへの非同期呼び出しのコンテキストに関する情報を渡すことができます。
使用例
[Visual Basic, C#, C++] Wsdl.exe ユーティリティによって、下の Math
XML Web サービス用に生成されるプロキシ クラスの例を次に示します。プロキシ クラスの BeginAdd
メソッドの中で、 BeginInvoke メソッド は、 Add
XML Web サービス メソッドの非同期呼び出しを開始しています。
Option Strict On
Option Explicit On
Imports System
Imports System.Diagnostics
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Xml.Serialization
Namespace MyMath
<System.Web.Services.WebServiceBindingAttribute(Name:="MyMathSoap", [Namespace]:="https://www.contoso.com/")> _
Public Class MyMath
Inherits System.Web.Services.Protocols.SoapHttpClientProtocol
<System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New
Me.Url = "https://www.contoso.com/math.asmx"
End Sub
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.Web.Services.Protocols.SoapDocumentMethodAttribute("https://www.contoso.com/Add", RequestNamespace:="https://www.contoso.com/", ResponseNamespace:="https://www.contoso.com/", Use:=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)> _
Public Function Add(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
Dim results() As Object = Me.Invoke("Add", New Object() {num1, num2})
Return CType(results(0),Integer)
End Function
<System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Function BeginAdd(ByVal num1 As Integer, ByVal num2 As Integer, ByVal callback As System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult
Return Me.BeginInvoke("Add", New Object() {num1, num2}, callback, asyncState)
End Function
<System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Function EndAdd(ByVal asyncResult As System.IAsyncResult) As Integer
Dim results() As Object = Me.EndInvoke(asyncResult)
Return CType(results(0),Integer)
End Function
End Class
End Namespace
[C#]
namespace MyMath {
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.Web.Services;
[System.Web.Services.WebServiceBindingAttribute(Name="MyMathSoap", Namespace="https://www.contoso.com/")]
public class MyMath : System.Web.Services.Protocols.SoapHttpClientProtocol {
[System.Diagnostics.DebuggerStepThroughAttribute()]
public MyMath() {
this.Url = "https://www.contoso.com/math.asmx";
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("https://www.contoso.com/Add", RequestNamespace="https://www.contoso.com/", ResponseNamespace="https://www.contoso.com/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int Add(int num1, int num2) {
object[] results = this.Invoke("Add", new object[] {num1,
num2});
return ((int)(results[0]));
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
public System.IAsyncResult BeginAdd(int num1, int num2, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("Add", new object[] {num1,
num2}, callback, asyncState);
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
public int EndAdd(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
}
}
[C++]
#using <mscorlib.dll>
#using <System.Web.Services.dll>
#using <System.Xml.dll>
#using <System.dll>
using namespace System::Diagnostics;
using namespace System::Xml::Serialization;
using namespace System;
using namespace System::Web::Services::Protocols;
using namespace System::Web::Services;
namespace MyMath {
[System::Web::Services::WebServiceBindingAttribute(Name=S"MyMathSoap", Namespace=S"https://www.contoso.com/")]
public __gc class MyMath : public System::Web::Services::Protocols::SoapHttpClientProtocol {
public:
[System::Diagnostics::DebuggerStepThroughAttribute]
MyMath() {
this->Url = S"https://www.contoso.com/math.asmx";
}
[System::Diagnostics::DebuggerStepThroughAttribute]
[System::Web::Services::Protocols::SoapDocumentMethodAttribute(S"https://www.contoso.com/Add",
RequestNamespace=S"https://www.contoso.com/", ResponseNamespace=S"https://www.contoso.com/",
Use=System::Web::Services::Description::SoapBindingUse::Literal,
ParameterStyle=System::Web::Services::Protocols::SoapParameterStyle::Wrapped)]
int Add(int num1, int num2) {
Object* temp1 [] = {__box(num1), __box(num2)};
Object* results[] = this->Invoke(S"Add", temp1);
return *dynamic_cast<__box int*>(results[0]);
}
[System::Diagnostics::DebuggerStepThroughAttribute]
System::IAsyncResult* BeginAdd(int num1, int num2, System::AsyncCallback* callback, Object* asyncState) {
Object* temp2 [] = {__box(num1), __box(num2)};
return this->BeginInvoke(S"Add", temp2, callback, asyncState);
}
[System::Diagnostics::DebuggerStepThroughAttribute]
int EndAdd(System::IAsyncResult* asyncResult) {
Object* results[] = this->EndInvoke(asyncResult);
return *dynamic_cast<int __box *>(results[0]);
}
};
}
[Visual Basic, C#, C++] 上のプロキシ クラスの作成元の Math
XML Web サービスの例を次に示します。
<%@ WebService Language="VB" Class="MyMath"%>
Imports System.Web.Services
Imports System
<WebService(Namespace:="https://www.contoso.com/")> _
Public Class MyMath
<WebMethod()> _
Public Function Add(num1 As Integer, num2 As Integer) As Integer
Return num1 + num2
End Function 'Add
End Class 'Math
[C#]
<%@ WebService Language="C#" Class="MyMath"%>
using System.Web.Services;
using System;
[WebService(Namespace="https://www.contoso.com/")]
public class MyMath {
[ WebMethod ]
public int Add(int num1, int num2) {
return num1+num2;
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
参照
SoapHttpClientProtocol クラス | SoapHttpClientProtocol メンバ | System.Web.Services.Protocols 名前空間 | IAsyncResult | AsyncCallback | EndInvoke | SoapDocumentMethodAttribute | WebClientProtocol