SoapHttpClientProtocol.BeginInvoke Methode

Definitie

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.

Van toepassing op

Zie ook