Прочитать на английском

Поделиться через


SoapHttpClientProtocol.Discover Метод

Определение

Динамически создает привязку к веб-службе XML, описанной в документе обнаружения по адресу Url.

public void Discover();

Исключения

Привязку, определенную в прокси-классе, не удалось найти в документе обнаружения по адресу Url.

-или-

Прокси-класс не имеет определенной привязки.

Примеры

Следующий пример кода представляет собой класс прокси, созданный с помощью служебной программы Wsdl.exe для Math веб-службы XML. Класс WebServiceBindingAttribute применяется к классу Math прокси-сервера, задав для имени привязки значение MathSoap , а его пространству имен — значение 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]));
        }
    }
}

В следующем примере кода используется клиент веб-службы, использующий предыдущий класс прокси. В событии EnterBtn_Click веб-формы клиент веб-службы XML вызывает Discover метод , пытаясь динамически привязаться к URL-адресу, предоставленному пользователем.

Важно!

В этом примере имеется текстовое поле, принимающее вводимые пользователем данные, что является потенциальной угрозой безопасности. По умолчанию данные, вводимые пользователем на веб-страницах ASP.NET, проверяются на наличие скриптов и HTML-элементов. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.

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

Комментарии

Клиент веб-службы XML может динамически привязаться к веб-службе XML, отличной от той, на что ссылается прокси-класс с помощью Discover метода . Как правило, Url свойство ссылается на базовый адрес веб-службы XML. Однако перед вызовом Discover метода задайте для Url свойства URL-адрес документа обнаружения. Метод Discover пытается найти совпадение в документе обнаружения с привязкой, определенной в прокси-классе, а затем динамически привязать к ней. В случае успешного выполнения последующие вызовы методов направляются в веб-службу XML, описанную в документе обнаружения.

Если прокси-класс создается с помощью средства языка описания веб-служб (Wsdl.exe), прокси-класс определяет привязку, реализованную методами веб-службы XML, которые он вызывает с помощью WebServiceBindingAttribute. Когда веб-служба XML реализует несколько привязок, Wsdl.exe создает класс прокси для каждой привязки. Применяется к каждому прокси-классу WebServiceBindingAttribute , который определяет имя привязки и ее пространство имен. Документ обнаружения, для свойства которому задано Url значение , должен содержать ссылку на веб-службу XML, реализующую то же имя привязки и пространство имен, иначе возникнет исключение.

Применяется к

Продукт Версии
.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

См. также раздел