SoapHttpClientProtocol.Discover メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Url にある探索ドキュメントに記述されている XML Web サービスに動的にバインドします。
public:
void Discover();
public void Discover ();
member this.Discover : unit -> unit
Public Sub Discover ()
例外
例
次のコード例は、XML Web サービスの Wsdl.exe ユーティリティ Math
を使用して生成されたプロキシ クラスです。
WebServiceBindingAttributeバインド名を に設定し、Math
その名前空間を に設定するプロキシ クラスに http://tempuri.org/
MathSoap
が適用されます。
#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 ]);
}
};
}
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]));
}
}
}
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
次のコード例は、前のプロキシ クラスを使用する Web サービス クライアントです。 Web フォームの EnterBtn_Click
イベント内で、XML Web サービス クライアントは、 メソッドを Discover 呼び出して、ユーザーが指定した URL に動的にバインドしようとします。
重要
この例には、ユーザー入力を受け付けるテキスト ボックスがあります。これにより、セキュリティが脆弱になる可能性があります。 既定では、ASP.NET Web ページによって、ユーザー入力にスクリプトまたは 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>
<%@ 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>
注釈
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