SoapHttpClientProtocol.BeginInvoke Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee start u een asynchrone aanroep van een XML-webservicemethode met behulp van 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
Parameters
- methodName
- String
De naam van de XML-webservicemethode in de afgeleide klasse die de BeginInvoke(String, Object[], AsyncCallback, Object) methode aanroept.
- parameters
- Object[]
Een matrix met objecten die de parameters bevatten die moeten worden doorgegeven aan de XML-webservice. De volgorde van de waarden in de matrix komt overeen met de volgorde van de parameters in de aanroepmethode van de afgeleide klasse.
- callback
- AsyncCallback
De gemachtigde die moet worden aangeroepen wanneer de asynchrone aanroep is voltooid. Als callback dat het is null, wordt de gemachtigde niet aangeroepen.
- asyncState
- Object
Extra informatie verstrekt door de beller.
Retouren
Een IAsyncResult die wordt doorgegeven aan de EndInvoke(IAsyncResult) methode om de retourwaarden te verkrijgen van de aanroep van de externe methode.
Uitzonderingen
De aanvraag heeft de servercomputer bereikt, maar is niet verwerkt.
De aanvraag is niet geldig voor de huidige status van het object.
Er is een fout opgetreden tijdens het openen van het netwerk.
Voorbeelden
Het volgende codevoorbeeld is een proxyklasse die wordt gegenereerd door het hulpprogramma Beschrijvingstaal van webservices (Wsdl.exe) voor de Math XML-webservice. Binnen de BeginAdd methode van de proxyklasse start de BeginInvoke methode een asynchrone aanroep naar de Add XML-webservicemethode.
#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
Het volgende codevoorbeeld is de Math XML-webservice, waaruit de voorgaande proxyklasse is gemaakt.
<%@ 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
Opmerkingen
Normaal gesproken roept u de BeginInvoke methode niet rechtstreeks aan, tenzij u uw eigen proxyklasse voor een XML-webservice bouwt.
Een proxyklasse die wordt gegenereerd door het hulpprogramma Beschrijvingstaal voor webservices (Wsdl.exe) van een servicebeschrijving, maakt de XML-webservicemethoden beschikbaar als namen die zijn afgeleid van de proxyklasse om de XML-webservicemethoden synchroon aan te roepen. Als u de XML-webservicemethoden asynchroon wilt aanroepen, worden er twee extra methoden toegevoegd aan de proxyklasse voor elke XML-webservicemethode, één met het Begin voorvoegsel dat is toegevoegd aan de naam van de XML-webservicemethode en een met het End voorvoegsel toegevoegd.
De proxyklasse roept de BeginInvoke methode aan om een asynchrone aanroep naar de XML-webservicemethode te starten. Als een XML-webservice bijvoorbeeld een XML-webservicemethode met de naam Addbeschikbaar maakt, bevat de proxyklasse een methode met de naam BeginAdd, voor het starten van een aanroep naar de XML-webservicemethode. Binnen de code voor de BeginAddmethode wordt een aanroep uitgevoerd naar de BeginInvoke methode en worden de resultaten geplaatst in het verwachte retourtype voor Add.
De methodName methode wordt gebruikt om de aangepaste kenmerken te vinden die mogelijk zijn toegevoegd aan de methode, zoals SoapDocumentMethodAttribute.
SoapDocumentMethodAttribute bevat aanvullende informatie over de afgeleide methode die is vereist voor het SOAP-protocol.
asyncState wordt doorgegeven callback aan en wordt opgenomen in de IAsyncResult methode die wordt geretourneerd BeginInvoke . De asyncState parameter kan worden gebruikt om informatie over de context van de asynchrone aanroep, die is opgegeven in de callback parameter, door te geven aan de gemachtigde die het resultaat verwerkt.