SoapHttpClientProtocol.BeginInvoke Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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 do serviço Web XML na classe derivada que está a invocar o BeginInvoke(String, Object[], AsyncCallback, Object) método.
- parameters
- Object[]
Um array de objetos contendo os parâmetros a passar para o serviço Web XML. A ordem dos valores no array corresponde à ordem dos parâmetros no método de chamada da classe derivada.
- callback
- AsyncCallback
O delegado a chamar quando a invocação assíncrona estiver concluída. Se callback for null, o delegado não é chamado.
- asyncState
- Object
Informação extra fornecida pelo interlocutor.
Devoluções
Um IAsyncResult que é passado ao EndInvoke(IAsyncResult) método para obter os valores de retorno da chamada remota ao método.
Exceções
O pedido chegou ao computador servidor, mas não foi processado com sucesso.
O pedido não era válido para o estado atual do objeto.
Ocorreu um erro ao aceder à rede.
Exemplos
O seguinte exemplo de código é uma classe proxy gerada pela ferramenta Web Services Description Language (Wsdl.exe) para o Math serviço Web XML. Dentro do BeginAdd método da classe proxy, o BeginInvoke método inicia uma invocação assíncrona ao Add método do 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 seguinte é o Math serviço Web XML, a partir 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
Observações
Normalmente, não chamaria o BeginInvoke método diretamente, a menos que estivesse a construir a sua própria classe proxy para um serviço Web XML.
Uma classe proxy gerada pela ferramenta Web Services Description Language (Wsdl.exe) a partir de uma Descrição de Serviço expõe os métodos do serviço Web XML como nomes derivados da classe proxy para chamar os métodos do serviço Web XML de forma síncrona. Para chamar os métodos do serviço Web XML de forma assíncrona, são adicionados dois métodos adicionais à classe proxy para cada método do serviço Web XML, um com o Begin prefixo adicionado ao nome do método do 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 ao método do serviço Web XML. Por exemplo, se um serviço Web XML expor 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 do serviço Web XML. Dentro do código para o BeginAdd, é feita uma chamada ao BeginInvoke método e os resultados são colocados no tipo de retorno esperado para Add.
O methodName é usado para encontrar os atributos personalizados que podem ter sido adicionados ao método, como SoapDocumentMethodAttribute.
SoapDocumentMethodAttribute fornece informações adicionais sobre o método derivado que é necessário para o protocolo SOAP.
asyncState é passado para callback e é incluído no IAsyncResult que é devolvido pelo BeginInvoke método. O asyncState parâmetro pode ser usado para passar informação sobre o contexto da chamada assíncrona, especificada no callback parâmetro, ao delegado que trata do resultado.