Compartir a través de


SoapHttpClientProtocol.BeginInvoke Método

Definición

Inicia una invocación asincrónica de un método de servicios web XML utilizando 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

Nombre del método de servicios Web XML de la clase derivada que llama al método BeginInvoke(String, Object[], AsyncCallback, Object).

parameters
Object[]

Matriz de objetos que contiene los parámetros que se pasan al servicio Web XML. El orden de los valores de la matriz se corresponde con el orden de los parámetros del método de llamada de la clase derivada.

callback
AsyncCallback

Delegado al que se va a llamar cuando finalice la invocación asincrónica. Si callback es null, no se llama al delegado.

asyncState
Object

Información adicional proporcionada por el llamador.

Devoluciones

IAsyncResult

Interfaz IAsyncResult que se pasa al método EndInvoke(IAsyncResult) para obtener los valores devueltos en la llamada al método remoto.

Excepciones

La solicitud llegó al servidor, pero no se procesó correctamente.

La solicitud no fue válida para el estado actual del objeto.

Error al obtener acceso a la red.

Ejemplos

El siguiente ejemplo de código es una clase de proxy generada por la herramienta Lenguaje de descripción de servicios web (Wsdl.exe) para el Math servicio web XML. Dentro del BeginAdd método de la clase proxy, el BeginInvoke método inicia una invocación asincrónica al método de Add servicio 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

El ejemplo de código siguiente es el Math servicio web XML, desde el que se creó la clase de proxy anterior.

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

Comentarios

Normalmente, no llamaría al BeginInvoke método directamente, a menos que estuviera creando su propia clase de proxy para un servicio web XML.

Una clase de proxy generada por la herramienta lenguaje de descripción de servicios web (Wsdl.exe) de una descripción del servicio expone los métodos de servicio web XML como nombres derivados de la clase proxy para llamar a los métodos de servicio web XML de forma sincrónica. Para llamar a los métodos de servicio web XML de forma asincrónica, se agregan dos métodos adicionales a la clase proxy para cada método de servicio web XML, uno con el Begin prefijo agregado al nombre del método de servicio web XML y otro con el End prefijo agregado.

La clase de proxy llama al BeginInvoke método para iniciar una llamada de invocación asincrónica al método de servicio web XML. Por ejemplo, si un servicio web XML expone un método de servicio web XML denominado Add, la clase proxy contiene un método denominado BeginAdd, para iniciar una invocación al método de servicio web XML. Dentro del código de BeginAdd, se realiza una llamada al BeginInvoke método y los resultados se colocan en el tipo de valor devuelto esperado para Add.

methodName se usa para buscar los atributos personalizados que se pueden haber agregado al método , como SoapDocumentMethodAttribute. SoapDocumentMethodAttribute proporciona información adicional sobre el método derivado necesario para el protocolo SOAP.

asyncState se pasa a callback y se incluye en el IAsyncResult que se devuelve desde el BeginInvoke método . El asyncState parámetro se puede usar para pasar información sobre el contexto de la llamada asincrónica, especificada en el callback parámetro , al delegado que controla el resultado.

Se aplica a

Consulte también