Partilhar via


SoapHttpClientProtocol.BeginInvoke Método

Definição

Inicia uma invocação assíncrona de um método de serviço Web XML usando 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

Parâmetros

methodName
String

O nome do método de serviço Web XML na classe derivada que está invocando o método BeginInvoke(String, Object[], AsyncCallback, Object).

parameters
Object[]

Uma matriz de objetos que contém os parâmetros a serem passados para o serviço Web XML. A ordem dos valores na matriz corresponde à ordem dos parâmetros no método de chamada da classe derivada.

callback
AsyncCallback

O delegado a ser chamado quando a invocação assíncrona for concluída. Se callback for null, o delegado não será chamado.

asyncState
Object

Informações adicionais fornecidas pelo chamador.

Retornos

IAsyncResult

Um IAsyncResult que é passado para o método EndInvoke(IAsyncResult) para obter os valores retornados da chamada de método remoto.

Exceções

A solicitação atingiu o computador do servidor, mas não foi processada com êxito.

A solicitação não era válida para o estado atual do objeto.

Ocorreu um erro ao acessar a rede.

Exemplos

O exemplo de código a seguir é uma classe proxy gerada pela ferramenta Linguagem de Descrição dos Serviços Web (Wsdl.exe) para o Math serviço Web XML. Dentro do BeginAdd método da classe proxy, o BeginInvoke método está iniciando uma invocação assíncrona para o método de Add serviço Web 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

O exemplo de código a seguir é o Math serviço Web XML, do qual a classe proxy anterior foi criada.

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

Comentários

Normalmente, você não chamaria o BeginInvoke método diretamente, a menos que estivesse criando sua própria classe proxy para um serviço Web XML.

Uma classe proxy gerada pela ferramenta Linguagem de Descrição dos Serviços Web (Wsdl.exe) de uma Descrição de Serviço expõe os métodos de serviço Web XML como nomes derivados da classe proxy para chamar os métodos de serviço Web XML de forma síncrona. Para chamar os métodos de serviço Web XML de forma assíncrona, dois métodos adicionais são adicionados à classe proxy para cada método de serviço Web XML, um com o Begin prefixo adicionado ao nome do método de serviço Web XML e outro com o End prefixo adicionado.

A classe proxy chama o BeginInvoke método para iniciar uma chamada de invocação assíncrona para o método de serviço Web XML. Por exemplo, se um serviço Web XML expõe um método de serviço Web XML chamado Add, a classe proxy contém um método chamado BeginAdd, para iniciar uma invocação ao método de serviço Web XML. Dentro do código para o BeginAdd, uma chamada é feita para o BeginInvoke método e os resultados são colocados no tipo de retorno esperado para Add.

O methodName é usado para localizar os atributos personalizados que podem ter sido adicionados ao método, como SoapDocumentMethodAttribute. SoapDocumentMethodAttribute fornece informações adicionais sobre o método derivado necessário para o protocolo SOAP.

asyncState é passado callback e está incluído no IAsyncResult que é retornado do BeginInvoke método. O asyncState parâmetro pode ser usado para passar informações sobre o contexto da chamada assíncrona, especificada no callback parâmetro, para o delegado que manipula o resultado.

Aplica-se a

Confira também