SoapHttpClientProtocol.BeginInvoke Method
Starts an asynchronous invocation of an XML Web service method using SOAP.
[Visual Basic] 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( string methodName, object[] parameters, AsyncCallback callback, object asyncState ); [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;
Parameters
- methodName
- The name of the XML Web service method in the derived class that is invoking BeginInvoke.
- parameters
- An array of objects containing the parameters to pass to the XML Web service. The order of the values in the array correspond to the order of the parameters in the calling method of the derived class.
- callback
- The delegate to call when the asynchronous invoke is complete. If callback is a null reference (Nothing in Visual Basic), the delegate is not called.
- asyncState
- Extra information supplied by the caller.
Return Value
An IAsyncResult which is passed to EndInvoke to obtain the return values from the remote method call.
Exceptions
| Exception Type | Condition |
|---|---|
| SoapException | The request reached the server computer, but was not processed successfully. |
Remarks
Typically, you would not call the BeginInvoke method directly, unless you were building your own proxy class for an XML Web service.
A proxy class generated by the Wsdl.exe utility from a Service Description exposes the XML Web service methods as names off of the proxy class for calling the XML Web service methods synchronously. For calling the XML Web service methods asynchronously, two additional methods are added to the proxy class for each XML Web service method:One with the Begin prefix added to the name of the XML Web service method and one with the End prefix added.
The proxy class calls the BeginInvoke method to start an asynchronous invocation call to the XML Web service method. For example, if an XML Web service exposes an XML Web service method named Add, the proxy class contains a method named BeginAdd, for starting an invocation to the XML Web service method. Within the code for the BeginAdd a call is made to BeginInvoke and then the results are coerced into the expected return type for Add.
The methodName is used to find the custom attributes which may have been added to the method, such as SoapDocumentMethodAttribute. SoapDocumentMethodAttribute provides additional information about the derived method which is required for the SOAP protocol. asyncState is passed into callback and is included in the IAsyncResult that is returned from BeginInvoke. The asyncState parameter can be used to pass information about the context of the asynchronous call to the delegate, specified in the callback parameter, handling the result.
Example
[Visual Basic, C#, C++] The following example is a proxy class generated by the Wsdl.exe utility for the Math XML Web service below. Within the BeginAdd method of the proxy class, the BeginInvoke method is starting an asynchronous invocation to the Add XML Web service method.
[Visual Basic] 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]:="http://www.contoso.com/")> _ Public Class MyMath Inherits System.Web.Services.Protocols.SoapHttpClientProtocol <System.Diagnostics.DebuggerStepThroughAttribute()> _ Public Sub New() MyBase.New Me.Url = "http://www.contoso.com/math.asmx" End Sub <System.Diagnostics.DebuggerStepThroughAttribute(), _ System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.contoso.com/Add", RequestNamespace:="http://www.contoso.com/", ResponseNamespace:="http://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="http://www.contoso.com/")] public class MyMath : System.Web.Services.Protocols.SoapHttpClientProtocol { [System.Diagnostics.DebuggerStepThroughAttribute()] public MyMath() { this.Url = "http://www.contoso.com/math.asmx"; } [System.Diagnostics.DebuggerStepThroughAttribute()] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.contoso.com/Add", RequestNamespace="http://www.contoso.com/", ResponseNamespace="http://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"http://www.contoso.com/")] public __gc class MyMath : public System::Web::Services::Protocols::SoapHttpClientProtocol { public: [System::Diagnostics::DebuggerStepThroughAttribute] MyMath() { this->Url = S"http://www.contoso.com/math.asmx"; } [System::Diagnostics::DebuggerStepThroughAttribute] [System::Web::Services::Protocols::SoapDocumentMethodAttribute(S"http://www.contoso.com/Add", RequestNamespace=S"http://www.contoso.com/", ResponseNamespace=S"http://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++] The following example is the Math XML Web service, from which the above proxy class was created.
[Visual Basic] <%@ WebService Language="VB" Class="MyMath"%> Imports System.Web.Services Imports System <WebService(Namespace:="http://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="http://www.contoso.com/")] public class MyMath { [ WebMethod ] public int Add(int num1, int num2) { return num1+num2; } }
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework
See Also
SoapHttpClientProtocol Class | SoapHttpClientProtocol Members | System.Web.Services.Protocols Namespace | IAsyncResult | AsyncCallback | EndInvoke | SoapDocumentMethodAttribute | WebClientProtocol