SoapHttpClientProtocol.Discover メソッド

定義

Url にある探索ドキュメントに記述されている XML Web サービスに動的にバインドします。

C#
public void Discover ();

例外

プロキシ クラスで定義されたバインディングが Url の探索ドキュメントに見つかりませんでした。

- または -

プロキシ クラスにバインディングが定義されていません。

次のコード例は、XML Web サービスの Wsdl.exe ユーティリティ Math を使用して生成されたプロキシ クラスです。 WebServiceBindingAttributeバインド名を に設定し、Mathその名前空間を に設定するプロキシ クラスに http://tempuri.org/MathSoap が適用されます。

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

次のコード例は、前のプロキシ クラスを使用する Web サービス クライアントです。 Web フォームの EnterBtn_Click イベント内で、XML Web サービス クライアントは、 メソッドを Discover 呼び出して、ユーザーが指定した URL に動的にバインドしようとします。

重要

この例には、ユーザー入力を受け付けるテキスト ボックスがあります。これにより、セキュリティが脆弱になる可能性があります。 既定では、ASP.NET Web ページによって、ユーザー入力にスクリプトまたは HTML 要素が含まれていないかどうかが検証されます。 詳細については、「スクリプトによる攻略の概要」を参照してください。

C#
<%@ 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 Web サービス クライアントは、 メソッドを使用して Discover 、プロキシ クラスで参照されている XML Web サービス以外の XML Web サービスに動的にバインドできます。 通常、 プロパティは Url XML Web サービスのベース アドレスを参照します。 ただし、 メソッドを呼び出す前に Discover 、 プロパティを Url 探索ドキュメントの URL に設定します。 メソッドは Discover 、探索ドキュメント内でプロキシ クラスで定義されているバインドとの一致を検索し、それに動的にバインドしようとします。 成功した場合、後続のメソッド呼び出しは、探索ドキュメントで説明されている XML Web サービスに送信されます。

プロキシ クラスが Web サービス記述言語ツール (Wsdl.exe) を使用して構築されている場合、プロキシ クラスは、 を使用して呼び出す XML Web サービス メソッドによって実装されるバインディングを WebServiceBindingAttribute定義します。 XML Web サービスが複数のバインドを実装する場合、Wsdl.exe はバインドごとにプロキシ クラスを作成します。 各プロキシ クラスに適用される は、 WebServiceBindingAttribute バインディングとその名前空間の名前を定義する です。 プロパティを に設定する Url 探索ドキュメントには、同じバインド名と名前空間を実装する XML Web サービスへの参照が含まれている必要があります。または、例外がスローされます。

適用対象

製品 バージョン
.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

こちらもご覧ください