SoapHttpClientProtocol.Discover Methode

Definition

Wird dynamisch an einen im Discoverydokument unter Url beschriebenen XML-Webdienst gebunden.

public void Discover();

Ausnahmen

Die in der Proxyklasse definierte Bindung konnte im Discoverydokument unter Url nicht gefunden werden.

- oder -

Für die Proxyklasse wurde keine Bindung definiert.

Beispiele

Das folgende Codebeispiel ist eine Proxyklasse, die mit dem Hilfsprogramm Wsdl.exe für den Math XML-Webdienst generiert wird. Ein WebServiceBindingAttribute wird auf die Math Proxyklasse angewendet, die den Bindungsnamen auf MathSoap und ihren Namespace auf http://tempuri.org/festlegt.

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="MathSoap", Namespace="http://tempuri.org/")]
    public class Math : System.Web.Services.Protocols.SoapHttpClientProtocol {

        [System.Diagnostics.DebuggerStepThroughAttribute()]
        public Math() {
            this.Url = "http://www.contoso.com/math.asmx";
        }

        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Add", 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]));
        }
    }
}

Das folgende Codebeispiel ist ein Webdienstclient, der die vorangehende Proxyklasse verwendet. Innerhalb des EnterBtn_Click -Ereignisses des Webformulars ruft der XML-Webdienstclient die Discover -Methode auf, um eine dynamische Bindung an die vom Benutzer bereitgestellte URL durchzuführen.

Wichtig

Dieses Beispiel umfasst ein Textfeld, das Benutzereingaben akzeptiert, die ein potenzielles Sicherheitsrisiko darstellen. Standardmäßig stellen ASP.NET-Webseiten sicher, dass Benutzereingaben keine Skript- oder HTML-Elemente enthalten. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

<%@ Page Language="C#" %>
<html>
    <script language="C#" runat="server">
       void EnterBtn_Click(Object Src, EventArgs E) 
          {
             MyMath.Math math = new MyMath.Math();
             // If the user types in a URL, attempt to dynamically bind to it.
             if (DiscoURL.Text != String.Empty)
                { 
                  math.Url = DiscoURL.Text;
                  try
                      { math.Discover();}
                  catch (Exception)
                      {
                        DiscoURL.Text = "Could not bind to MathSoap bindng at given URL.  ";
                      }
                }
 
         // Call the Add XML Web service method. 
         int total = math.Add(Convert.ToInt32(Num1.Text),Convert.ToInt32(Num2.Text));
             
             Total.Text = "Total: " + total.ToString();
         }
 
    </script>
 
    <body>
       <form action="MathClient.aspx" runat=server>
          
          Enter the URL of a disdovery document describing the MathSoap binding.
          <p> 
          <asp:textbox id="DiscoURL" runat=server Columns=80/>
          <p><p>
          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>

Hinweise

Ein XML-Webdienstclient kann mithilfe Discover der -Methode dynamisch an einen anderen XML-Webdienst als den in der Proxyklasse verwiesenen binden. In der Regel bezieht sich die Url -Eigenschaft auf die Basisadresse des XML-Webdiensts. Legen Sie jedoch vor dem Aufrufen der Discover -Methode die Url -Eigenschaft auf eine URL eines Ermittlungsdokuments fest. Die Discover -Methode versucht, im Ermittlungsdokument eine Übereinstimmung mit der in der Proxyklasse definierten Bindung zu finden und dann dynamisch an sie zu binden. Bei erfolgreicher Ausführung werden nachfolgende Methodenaufrufe an den im Ermittlungsdokument beschriebenen XML-Webdienst weitergeleitet.

Wenn die Proxyklasse mit dem Web Services Description Language-Tool (Wsdl.exe) erstellt wird, definiert die Proxyklasse die Bindung, die von den xml-Webdienstmethoden implementiert wird, die sie mithilfe von WebServiceBindingAttributeaufruft. Wenn ein XML-Webdienst mehrere Bindungen implementiert, erstellt Wsdl.exe für jede Bindung eine Proxyklasse. Auf jede Proxyklasse angewendet ist eine WebServiceBindingAttribute , die den Namen der Bindung und ihren Namespace definiert. Das Ermittlungsdokument, auf das Sie die Url Eigenschaft festlegen, muss einen Verweis auf einen XML-Webdienst enthalten, der denselben Bindungsnamen und Namespace implementiert, andernfalls wird eine Ausnahme ausgelöst.

Gilt für:

Produkt Versionen
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Weitere Informationen