HttpSimpleClientProtocol.BeginInvoke Methode

Definition

Startet den asynchronen Aufruf einer Methode eines XML-Webdiensts.

protected:
 IAsyncResult ^ BeginInvoke(System::String ^ methodName, System::String ^ requestUrl, cli::array <System::Object ^> ^ parameters, AsyncCallback ^ callback, System::Object ^ asyncState);
protected IAsyncResult BeginInvoke (string methodName, string requestUrl, object[] parameters, AsyncCallback callback, object asyncState);
member this.BeginInvoke : string * string * obj[] * AsyncCallback * obj -> IAsyncResult
Protected Function BeginInvoke (methodName As String, requestUrl As String, parameters As Object(), callback As AsyncCallback, asyncState As Object) As IAsyncResult

Parameter

methodName
String

Der Name der XML-Webdienstmethode.

requestUrl
String

Die beim Erstellen von WebRequest zu verwendende URL.

parameters
Object[]

Ein Array von Objekten mit den Parametern, die an die XML-Webdienstmethode zu übergeben sind. Die Reihenfolge der Werte im Array entspricht der Reihenfolge der Parameter in der Aufrufmethode der abgeleiteten Klasse.

callback
AsyncCallback

Der Delegat, der aufgerufen werden soll, wenn der asynchrone Methodenaufruf abgeschlossen ist. Wenn callback auf null festgelegt ist, wird der Delegat nicht aufgerufen.

asyncState
Object

Die von einem Client gelieferten zusätzlichen Informationen.

Gibt zurück

Ein IAsyncResult, das an die EndInvoke(IAsyncResult)-Methode übergeben werden kann, um die Rückgabewerte von der XML-Webdienstmethode abzurufen.

Ausnahmen

Die Anforderung hat den Servercomputer erreicht, wurde jedoch nicht erfolgreich verarbeitet.

Beispiele

Das folgende Codebeispiel ist ein ASP.NET-Webformular, das einen XML-Webdienst namens Mathaufruft. Innerhalb der EnterBtn_Click Funktion startet und schließt das Webformular einen asynchronen Aufruf der Add XML-Webdienstmethode ab.

<%@ Page Language="VB" %>
<html>
    <script language="VB" runat="server">
    Sub EnterBtn_Click(Src As Object, E As EventArgs)
        Dim math As New MyMath.Math()
        
        ' Call to Add XML Web service method asynchronously.
        Dim result As IAsyncResult = math.BeginAdd(Convert.ToInt32(Num1.Text), Convert.ToInt32(Num2.Text), Nothing, Nothing)
        
        ' Wait for the asynchronous call to complete.
        result.AsyncWaitHandle.WaitOne()
        
        ' Complete the asynchronous call to the Add XML Web service method.
        Dim iTotal As Integer = math.EndAdd(result)
        
        Total.Text = "Total: " & iTotal.ToString()
    End Sub 'EnterBtn_Click
 
  </script>
 
    <body>
       <form action="MathClient.aspx" runat=server>
           
          Enter the two numbers you want to add and then press the Total button.
          <p>
          Number 1: <asp:textbox id="Num1" runat=server/>  +
          Number 2: <asp:textbox id="Num2" runat=server/> =
          <asp:button text="Total" Onclick="EnterBtn_Click" runat=server/>
          <p>
          <asp:label id="Total"  runat=server/>
          
       </form>
    </body>
 </html>

Das folgende Codebeispiel ist eine Proxyklasse, die vom Web Services Description Language-Tool (Wsdl.exe) für den Math unten angegebenen XML-Webdienst generiert wird. Innerhalb der BeginAdd -Methode der Proxyklasse startet die BeginInvoke -Methode einen asynchronen Aufruf der Add XML-Webdienstmethode.

namespace MyMath
{
   [XmlRootAttribute("snippet1>",Namespace="http://MyMath/",IsNullable=false)]
   public ref class Math: public HttpGetClientProtocol
   {
   public:
      Math()
      {
         this->Url = "http://www.contoso.com/math.asmx";
      }

      [HttpMethodAttribute(System::Web::Services::Protocols::XmlReturnReader::typeid,
      System::Web::Services::Protocols::UrlParameterWriter::typeid)]
      int Add( String^ num1, String^ num2 )
      {
         array<Object^>^temp0 = {num1,num2};
         return  *dynamic_cast<int^>(this->Invoke( "Add", String::Concat( this->Url, "/Add" ), temp0 ));
      }

      IAsyncResult^ BeginAdd( String^ num1, String^ num2, AsyncCallback^ callback, Object^ asyncState )
      {
         array<Object^>^temp1 = {num1,num2};
         return this->BeginInvoke( "Add", String::Concat( this->Url, "/Add" ), temp1, callback, asyncState );
      }

      int EndAdd( IAsyncResult^ asyncResult )
      {
         return  *dynamic_cast<int^>(this->EndInvoke( asyncResult ));
      }
   };
}
namespace MyMath
{
    [XmlRootAttribute("int", Namespace = "http://MyMath/", IsNullable = false)]
    public class Math : HttpGetClientProtocol
    {
        public Math()
        {
            this.Url = "http://www.contoso.com/math.asmx";
        }

        [HttpMethodAttribute(typeof(System.Web.Services.Protocols.XmlReturnReader),
            typeof(System.Web.Services.Protocols.UrlParameterWriter))]
        public int Add(int num1, int num2)
        {
            return ((int)(this.Invoke("Add", ((this.Url) + ("/Add")),
                new object[] { num1, num2 })));
        }

        public IAsyncResult BeginAdd(int num1, int num2, AsyncCallback callback, object asyncState)
        {
            return this.BeginInvoke("Add", ((this.Url) + ("/Add")),
                new object[] { num1, num2 }, callback, asyncState);
        }

        public int EndAdd(IAsyncResult asyncResult)
        {
            return ((int)(this.EndInvoke(asyncResult)));
        }
    }
}
Namespace MyMath
    <XmlRootAttribute("int", Namespace := "http://MyMath/", IsNullable := False)> _
    Public Class Math
        Inherits HttpGetClientProtocol
        
        Public Sub New()
            Me.Url = "http://www.contoso.com/math.asmx"
        End Sub
        
        <HttpMethodAttribute(GetType(XmlReturnReader), GetType(UrlParameterWriter))> _
        Public Function Add(num1 As String, num2 As String) As Integer
            Return CInt(Me.Invoke("Add", Me.Url + "/Add", New Object() {num1, num2}))
        End Function 'Add
        
        
        Public Function BeginAdd(num1 As String, num2 As String, callback As AsyncCallback, asyncState As Object) As IAsyncResult
            Return Me.BeginInvoke("Add", Me.Url + "/Add", New Object() {num1, num2}, callback, asyncState)
        End Function 'BeginAdd
        
        
        Public Function EndAdd(asyncResult As IAsyncResult) As Integer
            Return CInt(Me.EndInvoke(asyncResult))
        End Function 'EndAdd
    End Class
End Namespace 'MyMath

Das folgende Codebeispiel ist der Math XML-Webdienst, aus dem die vorherige Proxyklasse erstellt wurde.

<%@ WebService Language="C#" Class="Math"%>
 using System.Web.Services;
 using System;
 
 public class Math {
      [ WebMethod ]
      public int Add(int num1, int num2) {
          return num1+num2;
          }
 }
<%@ WebService Language="VB" Class="Math"%>
Imports System.Web.Services
Imports System

Public Class Math
    <WebMethod()> _
    Public Function Add(num1 As Integer, num2 As Integer) As Integer
        Return num1 + num2
    End Function 'Add
End Class 'Math

Hinweise

Der methodName -Parameter wird verwendet, um die Typen der Parameter zu suchen und Werte der Methode zurückzugeben, die die BeginInvoke -Methode aufruft. Es wird auch verwendet, um benutzerdefinierte Attribute zu finden, die der -Methode möglicherweise hinzugefügt wurden. SoapDocumentMethodAttribute, SoapRpcMethodAttributeund XmlElementAttribute stellen zusätzliche Informationen zur abgeleiteten Methode bereit, die für das HTTP-Protokoll erforderlich ist.

asyncState wird an callback übergeben und ist in der enthalten, die IAsyncResult von der BeginInvoke -Methode zurückgegeben wird. Es ist nützlich, um Informationen aus dem Kontext des asynchronen Aufrufs an die Behandlung des asynchronen Ergebnisses in callbackzu übergeben.

Gilt für:

Weitere Informationen