SoapHttpClientProtocol.BeginInvoke Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Startet einen asynchronen Aufruf einer XML-Webdienstmethode mithilfe von SOAP.
protected:
IAsyncResult ^ BeginInvoke(System::String ^ methodName, cli::array <System::Object ^> ^ parameters, AsyncCallback ^ callback, System::Object ^ asyncState);
protected IAsyncResult BeginInvoke(string methodName, object[] parameters, AsyncCallback callback, object asyncState);
member this.BeginInvoke : string * obj[] * AsyncCallback * obj -> IAsyncResult
Protected Function BeginInvoke (methodName As String, parameters As Object(), callback As AsyncCallback, asyncState As Object) As IAsyncResult
Parameter
- methodName
- String
Der Name der XML-Webdienstmethode in der abgeleiteten Klasse, die die BeginInvoke(String, Object[], AsyncCallback, Object) Methode aufruft.
- parameters
- Object[]
Ein Array von Objekten, die die Parameter enthalten, die an den XML-Webdienst übergeben werden sollen. Die Reihenfolge der Werte im Array entspricht der Reihenfolge der Parameter in der aufrufenden Methode der abgeleiteten Klasse.
- callback
- AsyncCallback
Der Delegat, der aufgerufen werden soll, wenn der asynchrone Aufruf abgeschlossen ist. Wenn callback ja null, wird die Stellvertretung nicht aufgerufen.
- asyncState
- Object
Zusätzliche Informationen, die vom Anrufer bereitgestellt werden.
Gibt zurück
Ein IAsyncResult Wert, der an die EndInvoke(IAsyncResult) Methode übergeben wird, um die Rückgabewerte aus dem Remotemethodenaufruf abzurufen.
Ausnahmen
Die Anforderung hat den Servercomputer erreicht, wurde aber nicht erfolgreich verarbeitet.
Die Anforderung war für den aktuellen Zustand des Objekts ungültig.
Fehler beim Zugriff auf das Netzwerk.
Beispiele
Das folgende Codebeispiel ist eine Proxyklasse, die vom Web Services Description Language Tool (Wsdl.exe) für den Math XML-Webdienst generiert wird. Innerhalb der BeginAdd Methode der Proxyklasse startet die BeginInvoke Methode einen asynchronen Aufruf an die Add XML-Webdienstmethode.
#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="MyMathSoap",Namespace="http://www.contoso.com/")]
public ref class MyMath: public System::Web::Services::Protocols::SoapHttpClientProtocol
{
public:
[System::Diagnostics::DebuggerStepThroughAttribute]
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)]
int Add( int num1, int num2 )
{
array<Object^>^temp1 = {num1,num2};
array<Object^>^results = this->Invoke( "Add", temp1 );
return *dynamic_cast<int^>(results[ 0 ]);
}
[System::Diagnostics::DebuggerStepThroughAttribute]
System::IAsyncResult^ BeginAdd( int num1, int num2, System::AsyncCallback^ callback, Object^ asyncState )
{
array<Object^>^temp2 = {num1,num2};
return this->BeginInvoke( "Add", temp2, callback, asyncState );
}
[System::Diagnostics::DebuggerStepThroughAttribute]
int EndAdd( System::IAsyncResult^ asyncResult )
{
array<Object^>^results = this->EndInvoke( asyncResult );
return *dynamic_cast<int^>(results[ 0 ]);
}
};
}
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]));
}
}
}
Option Strict On
Option Explicit On
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
Das folgende Codebeispiel ist der Math XML-Webdienst, aus dem die vorherige Proxyklasse erstellt wurde.
<%@ 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;
}
}
<%@ 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
Hinweise
In der Regel würden Sie die BeginInvoke Methode nicht direkt aufrufen, es sei denn, Sie haben ihre eigene Proxyklasse für einen XML-Webdienst erstellt.
Eine proxyklasse, die vom Web Services Description Language-Tool (Wsdl.exe) aus einer Dienstbeschreibung generiert wird, macht die XML-Webdienstmethoden als Namen verfügbar, die von der Proxyklasse abgeleitet wurden, um die XML-Webdienstmethoden synchron aufzurufen. Um die XML-Webdienstmethoden asynchron aufzurufen, werden der Proxyklasse für jede XML-Webdienstmethode zwei zusätzliche Methoden hinzugefügt, eines mit dem Präfix, das Begin dem Namen der XML-Webdienstmethode und einer mit dem Hinzugefügten End Präfix hinzugefügt wurde.
Die Proxyklasse ruft die BeginInvoke Methode auf, um einen asynchronen Aufruf der XML-Webdienstmethode zu starten. Wenn beispielsweise ein XML-Webdienst eine XML-Webdienstmethode mit dem Namen Addverfügbar macht, enthält die Proxyklasse eine Methode namens BeginAdd,, um einen Aufruf an die XML-Webdienstmethode zu starten. Innerhalb des Codes für die BeginAddMethode wird ein Aufruf der Methode ausgeführt BeginInvoke , und die Ergebnisse werden in den erwarteten Rückgabetyp für Add.
Es methodName wird verwendet, um die benutzerdefinierten Attribute zu finden, die der Methode hinzugefügt wurden, z SoapDocumentMethodAttribute. B. .
SoapDocumentMethodAttribute stellt zusätzliche Informationen zur abgeleiteten Methode bereit, die für das SOAP-Protokoll erforderlich ist.
asyncState wird an die Methode übergeben callback und in der IAsyncResult zurückgegebenen BeginInvoke Methode enthalten. Der asyncState Parameter kann verwendet werden, um Informationen zum Kontext des asynchronen Aufrufs, der im callback Parameter angegeben ist, an den Delegaten zu übergeben, der das Ergebnis behandelt.