Udostępnij za pośrednictwem


SoapHttpClientProtocol.BeginInvoke Metoda

Definicja

Uruchamia asynchroniczne wywołanie metody usługi sieci Web XML przy użyciu protokołu 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

Nazwa metody usługi sieci Web XML w klasie pochodnej wywołującej metodę BeginInvoke(String, Object[], AsyncCallback, Object) .

parameters
Object[]

Tablica obiektów zawierających parametry, które mają być przekazywane do usługi sieci Web XML. Kolejność wartości w tablicy odpowiada kolejności parametrów w metodzie wywołującej klasy pochodnej.

callback
AsyncCallback

Delegat do wywołania po zakończeniu wywołania asynchronicznego. Jeśli callback jest to null, delegat nie jest wywoływany.

asyncState
Object

Dodatkowe informacje dostarczone przez obiekt wywołujący.

Zwraca

IAsyncResult

Element IAsyncResult przekazywany do EndInvoke(IAsyncResult) metody w celu uzyskania wartości zwracanych z wywołania metody zdalnej.

Wyjątki

Żądanie dotarło do komputera serwera, ale nie zostało pomyślnie przetworzone.

Żądanie nie było prawidłowe dla bieżącego stanu obiektu.

Wystąpił błąd podczas uzyskiwania dostępu do sieci.

Przykłady

Poniższy przykład kodu to klasa serwera proxy wygenerowana przez narzędzie języka opisu usług sieci Web (Wsdl.exe) dla Math usługi sieci Web XML. BeginAdd W ramach metody klasy BeginInvoke serwera proxy metoda uruchamia asynchroniczną wywołanie metody Add usługi sieci 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

Poniższy przykład kodu to Math usługa sieci Web XML, z której utworzono poprzednią klasę 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

Uwagi

Zazwyczaj metoda nie jest wywoływana BeginInvoke bezpośrednio, chyba że utworzono własną klasę serwera proxy dla usługi sieci Web XML.

Klasa serwera proxy wygenerowana przez narzędzie języka opisu usług sieci Web (Wsdl.exe) z opisu usługi uwidacznia metody usługi sieci Web XML jako nazwy pochodzące z klasy proxy w celu wywołania metod usługi sieci Web XML synchronicznie. Aby wywołać metody usługi sieci Web XML asynchronicznie, dwie dodatkowe metody są dodawane do klasy serwera proxy dla każdej metody usługi sieci Web XML, jeden z Begin prefiksem dodanym do nazwy metody usługi sieci Web XML i jeden z dodanym prefiksem End .

Klasa serwera proxy wywołuje metodę BeginInvoke , aby uruchomić wywołanie asynchroniczne do metody usługi sieci Web XML. Jeśli na przykład usługa sieci Web XML uwidacznia metodę usługi sieci Web XML o nazwie Add, klasa proxy zawiera metodę o nazwie BeginAdd, aby uruchomić wywołanie metody usługi sieci Web XML. W kodzie dla BeginAddmetody wywołanie jest wykonywane do BeginInvoke metody, a wyniki są umieszczane w oczekiwanym typie zwracanym dla Addelementu .

Służy methodName do znajdowania atrybutów niestandardowych, które mogły zostać dodane do metody, na przykład SoapDocumentMethodAttribute. SoapDocumentMethodAttribute Zawiera dodatkowe informacje o metodzie pochodnej wymaganej dla protokołu SOAP.

asyncState jest przekazywany do callback metody i jest uwzględniany w IAsyncResult metodzie zwracanej przez metodę BeginInvoke . Parametr asyncState może służyć do przekazywania informacji o kontekście wywołania asynchronicznego określonego w parametrze callback do delegata obsługującego wynik.

Dotyczy

Zobacz też