Sdílet prostřednictvím


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ává metodu BeginInvoke(String, Object[], AsyncCallback, Object) .

parameters
Object[]

Pole objektů obsahující 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ý se má volat po dokončení asynchronního vyvolání. Pokud callback je null, delegát se nevolá.

asyncState
Object

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

Návraty

Předá IAsyncResult se EndInvoke(IAsyncResult) metodě k získání návratových hodnot z volání vzdálené metody.

Výjimky

Požadavek dorazil do počítače serveru, ale nebyl úspěšně zpracová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 třída proxy generovaná nástrojem Web Services Description Language (Wsdl.exe) pro Math webovou službu XML. BeginAdd V rámci metody třídy BeginInvoke proxy metoda spouští asynchronní vyvolání metody Add 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 nevolali metodu BeginInvoke přímo, pokud jste vytvářeli vlastní třídu proxy pro webovou službu XML.

Třída proxy vygenerovaná nástrojem Jazyk popisu 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 proxy pro každou metodu webové služby XML, jedna s Begin předponou přidána k názvu metody webové služby XML a jedna s předponou End přidána.

Třída proxy volá metodu BeginInvoke pro spuštění asynchronního volání volání webové služby XML. Pokud například webová služba XML zpřístupňuje metodu webové služby XML s názvem Add, proxy třída obsahuje metodu s názvem BeginAdd, pro spuštění vyvolání metody webové služby XML. V kódu pro BeginAddse provede BeginInvoke volání metody a výsledky se umístí 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 požadována pro protokol SOAP.

asyncState se předá do callback a je zahrnuta v souboru 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é