SoapHttpClientProtocol.EndInvoke(IAsyncResult) Methode

Definition

Beendet einen asynchronen Aufruf einer XML-Webdienstmethode mithilfe von SOAP.

protected:
 cli::array <System::Object ^> ^ EndInvoke(IAsyncResult ^ asyncResult);
protected object[] EndInvoke(IAsyncResult asyncResult);
member this.EndInvoke : IAsyncResult -> obj[]
Protected Function EndInvoke (asyncResult As IAsyncResult) As Object()

Parameter

asyncResult
IAsyncResult

Die IAsyncResult von der BeginInvoke(String, Object[], AsyncCallback, Object) Methode zurückgegebene.

Gibt zurück

Object[]

Ein Array von Objekten, die den Rückgabewert und alle Nachverweis- oder out Parameter der abgeleiteten Klassenmethode enthalten.

Ausnahmen

asyncResult ist nicht der Rückgabewert aus der BeginInvoke(String, Object[], AsyncCallback, Object) Methode.

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

Die Anforderung war für den aktuellen Zustand des Objekts ungültig.

Fehler beim Zugriff auf das Netzwerk.

Beispiele

Das folgende Codebeispiel ist eine Proxyklasse, die von Wsdl.exe für den Math XML-Webdienst generiert wird. Innerhalb der EndAdd Methode der Proxyklasse schließt die EndInvoke Methode den asynchronen Aufruf an die Add XML-Webdienstmethode ab.

#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^>^temp0 = {num1,num2};
         array<Object^>^results = this->Invoke( "Add", temp0 );
         return  *dynamic_cast<int^>(results[ 0 ]);
      }


      [System::Diagnostics::DebuggerStepThroughAttribute]
      System::IAsyncResult^ BeginAdd( int num1, int num2, System::AsyncCallback^ callback, Object^ asyncState )
      {
         array<Object^>^temp1 = {num1,num2};
         return this->BeginInvoke( "Add", temp1, 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

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

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

Hinweise

In der Regel würden Sie die EndInvoke Methode nicht direkt aufrufen, es sei denn, Sie haben ihre eigene Proxyklasse für einen XML-Webdienst erstellt.

Eine proxyklasse, die vom Web Services Description Language Tool (Wsdl.exe) für einen XML-Webdienst generiert wird, macht die XML-Webdienstmethoden als Namen aus der Proxyklasse zum synchronen Aufrufen der XML-Webdienstmethoden verfügbar. Zum asynchronen Aufrufen der XML-Webdienstmethoden werden der Proxyklasse für jede XML-Webdienstmethode zwei zusätzliche Methoden hinzugefügt, eines mit dem Präfix, das Begin dem Namen der XML-Webdienstmethode und einer mit dem End hinzugefügten Präfix hinzugefügt wurde.

Die Proxyklasse ruft die EndInvoke Methode auf, um einen asynchronen Aufruf der XML-Webdienstmethode abzuschließen. Wenn beispielsweise ein XML-Webdienst eine XML-Webdienstmethode mit dem Namen Addverfügbar macht, enthält die Proxyklasse eine Methode namens EndAdd, um einen asynchronen Aufruf einer XML-Webdienstmethode abzuschließen. Innerhalb des Codes für den EndAdd Aufruf wird an die EndInvoke Methode vorgenommen, und dann werden die Ergebnisse in den erwarteten Rückgabetyp für Add.

Gilt für:

Weitere Informationen