SoapHttpClientProtocol.BeginInvoke Metoda

Definice

Spustí asynchronní vyvolání metody webové služby XML pomocí protokolu 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

Parametry

methodName
String

Název metody webové služby XML v odvozené třídě, která vyvolá metodu BeginInvoke(String, Object[], AsyncCallback, Object) .

parameters
Object[]

Pole objektů obsahujících parametry, které se mají předat webové službě XML. Pořadí hodnot v poli odpovídá pořadí parametrů ve volající metodě odvozené třídy.

callback
AsyncCallback

Delegát, který má volat, když je asynchronní vyvolání dokončeno. Pokud callback je null, delegát není volána.

asyncState
Object

Další informace poskytnuté volajícím.

Návraty

Předá IAsyncResult se EndInvoke(IAsyncResult) metodě pro získání vrácených hodnot ze vzdáleného volání metody.

Výjimky

Požadavek se dostal na serverový počítač, ale nezpracoval se úspěšně.

Požadavek nebyl platný pro aktuální stav objektu.

Při přístupu k síti došlo k chybě.

Příklady

Následující příklad kódu je proxy třída vygenerovaná nástrojem Web Services Description Language (Wsdl.exe) pro Math webovou službu XML. BeginAdd V rámci metody třídy proxy metoda BeginInvoke spouští asynchronní vyvolání Add metody webové služby XML.

#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

Následující příklad kódu je Math webová služba XML, ze které byla vytvořena předchozí třída proxy.

<%@ 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

Poznámky

Obvykle byste metodu BeginInvoke nevolali přímo, pokud jste nestavěli vlastní třídu proxy pro webovou službu XML.

Třída proxy vygenerovaná nástrojem jazyka popisů webových služeb (Wsdl.exe) z popisu služby zveřejňuje metody webové služby XML jako názvy odvozené z třídy proxy pro synchronní volání metod webové služby XML. Chcete-li volat metody webové služby XML asynchronně, jsou přidány dvě další metody do třídy proxy pro každou metodu webové služby XML, jedna s Begin předponou přidanou do názvu metody webové služby XML a jedna s přidanou předponou End .

Třída proxy volá metodu BeginInvoke , která spustí asynchronní volání metody webové služby XML. Pokud například webová služba XML zveřejňuje metodu webové služby XML s názvem Add, třída proxy obsahuje metodu s názvem BeginAdd, pro spuštění vyvolání metody webové služby XML. V kódu pro BeginAdd, volání metody BeginInvoke a výsledky jsou umístěny do očekávaného návratového typu pro Add.

Slouží methodName k vyhledání vlastních atributů, které mohly být přidány do metody, například SoapDocumentMethodAttribute. SoapDocumentMethodAttribute poskytuje další informace o odvozené metodě, která je vyžadována pro protokol SOAP.

asyncState je předán callback a je zahrnut do IAsyncResult , který je vrácen z BeginInvoke metody. Parametr asyncState lze použít k předání informací o kontextu asynchronního volání zadaného v parametru callback delegátu, který zpracovává výsledek.

Platí pro

Viz také