SoapHttpClientProtocol.Discover メソッド
アセンブリ: System.Web.Services (system.web.services.dll 内)



XML Web サービス クライアントは、Discover メソッドを使ってプロキシ クラスで参照されている XML Web サービスを除き、1 つの XML Web サービスに動的にバインドできます。通常 Url プロパティは、XML Web サービスのベース アドレスを参照します。ただし Discover メソッドを呼び出す前に、Url プロパティに探索ドキュメントの URL を設定します。Discover メソッドは、プロキシ クラスで定義したバインディングと探索ドキュメントに一致項目があるか検索し、その一致項目に動的にバインドしようとします。一致した場合、その後のメソッドの呼び出しは探索ドキュメントに記述されている XML Web サービスに転送されます。
プロキシ クラスが Web サービス記述言語ツール (Wsdl.exe) で作成されている場合、そのプロキシ クラスは、WebServiceBindingAttribute を使用して呼び出す XML Web サービス メソッドによって実装されるバインディングを定義します。XML Web サービスに複数のバインディングが実装される場合、Wsdl.exe はバインディングごとにプロキシ クラスを作成します。各プロキシ クラスには、バインディングの名前とその名前空間を定義する WebServiceBindingAttribute が適用されます。Url プロパティを設定した探索ドキュメントには、同じバインディング名と名前空間を実装する XML Web サービスへの参照が格納されている必要があります。それ以外の場合は、例外がスローされます。

Wsdl.exe ユーティリティによって、Math XML Web サービス用に生成されるプロキシ クラスのコード例を次に示します。WebServiceBindingAttribute は、バインディング名を MathSoap、その名前空間を http://tempuri.org/ に設定する Math プロキシ クラスに適用されます。
Namespace MyMath <System.Web.Services.WebServiceBindingAttribute(Name:="MathSoap", [Namespace]:="http://tempuri.org/")> _ Public Class Math 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://tempuri.org/Add", 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
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])); } } }
#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="MathSoap",Namespace="http://tempuri.org/")] public ref class Math: public System::Web::Services::Protocols::SoapHttpClientProtocol { public: [System::Diagnostics::DebuggerStepThroughAttribute] 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)] 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 ]); } }; }
前述のプロキシ クラスを使用する Web サービス クライアントのコード例を次に示します。Web フォームの EnterBtn_Click イベントの中で、XML Web サービス クライアントは Discover メソッドを呼び出し、ユーザーが指定した URL への動的なバインディングを試みます。
<%@ Page Language="VB" %> <html> <script language="VB" runat="server"> Sub EnterBtn_Click(Src As Object, E As EventArgs) Dim math As New Math() Dim result As Integer ' If the user types in a URL, attempt to dynamically bind to it. If DiscoURL.Text <> String.Empty Then math.Url = DiscoURL.Text Try math.Discover() Catch except As Exception DiscoURL.Text = "Could not bind to MathSoap bindng at given URL." End Try End If ' Call to Add XML Web service method. result = math.Add(Convert.ToInt32(Num1.Text),Convert.ToInt32(Num2.Text)) Total.Text = "Total: " & result.ToString() End Sub 'EnterBtn_Click </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>
<%@ 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>

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からSoapHttpClientProtocol.Discover メソッドを検索する場合は、下記のリンクをクリックしてください。

- SoapHttpClientProtocol.Discover メソッドのページへのリンク