SoapHttpClientProtocol.Discover Método

Definición

Enlaza dinámicamente con el servicio Web XML descrito en el documento de descubrimiento en Url.

public void Discover();

Excepciones

El enlace definido en la clase de proxy no se puede encontrar en el documento de descubrimiento en Url.

o bien

La clase de proxy no tiene un enlace definido.

Ejemplos

El ejemplo de código siguiente es una clase de proxy generada mediante la utilidad Wsdl.exe para el Math servicio web XML. WebServiceBindingAttribute Se aplica a la Math clase de proxy que establece el nombre de enlace en MathSoap y su espacio de nombres en http://tempuri.org/.

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]));
        }
    }
}

El ejemplo de código siguiente es un cliente de servicio web que usa la clase de proxy anterior. En el EnterBtn_Click caso del formulario web, el cliente del servicio web XML llama al Discover método que intenta enlazar dinámicamente a la dirección URL proporcionada por el usuario.

Importante

Este ejemplo tiene un cuadro de texto que acepta datos proporcionados por el usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, ASP.NET Web Pages valida que los datos proporcionados por el usuario no incluyen elementos HTML ni de script. Para más información, consulte Información general sobre los ataques mediante scripts.

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

Comentarios

Un cliente de servicio web XML puede enlazar dinámicamente a un servicio web XML distinto del al que se hace referencia en la clase de proxy mediante el Discover método . Normalmente, la Url propiedad hace referencia a la dirección base del servicio web XML. Sin embargo, antes de invocar el Discover método , establezca la Url propiedad en una dirección URL de un documento de detección. El Discover método intenta buscar una coincidencia en el documento de detección con el enlace definido en la clase proxy y, a continuación, se enlaza dinámicamente a él. Si se ejecuta correctamente, las llamadas a métodos posteriores se dirigen al servicio web XML descrito en el documento de detección.

Si la clase de proxy se crea mediante la herramienta Lenguaje de descripción de servicios web (Wsdl.exe), la clase de proxy define el enlace implementado por los métodos del servicio web XML que invoca mediante WebServiceBindingAttribute. Cuando un servicio web XML implementa varios enlaces, Wsdl.exe crea una clase de proxy para cada enlace. Aplicado a cada clase de proxy es un WebServiceBindingAttribute que define el nombre del enlace y su espacio de nombres. El documento de detección en el que establece la Url propiedad debe contener una referencia a un servicio web XML que implementa el mismo nombre de enlace y espacio de nombres, o se produce una excepción.

Se aplica a

Producto Versiones
.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

Consulte también