SoapHttpClientProtocol.Discover Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Dynamicznie wiąże się z usługą sieci Web XML opisaną w dokumencie odnajdywania pod adresem Url.
public:
void Discover();
public void Discover ();
member this.Discover : unit -> unit
Public Sub Discover ()
Wyjątki
Nie można odnaleźć powiązania zdefiniowanego w klasie serwera proxy w dokumencie odnajdywania pod adresem Url.
-lub-
Klasa serwera proxy nie ma zdefiniowanego powiązania.
Przykłady
Poniższy przykład kodu to klasa serwera proxy wygenerowana przy użyciu narzędzia Wsdl.exe dla Math
usługi sieci Web XML. Element jest WebServiceBindingAttribute stosowany do Math
klasy proxy ustawiając nazwę powiązania na MathSoap
i jego przestrzeń nazw na http://tempuri.org/
.
#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
Poniższy przykład kodu to klient usługi sieci Web używający poprzedniej klasy serwera proxy.
EnterBtn_Click
W przypadku formularza internetowego klient usługi sieci Web XML wywołuje Discover metodę próbującą dynamicznie powiązać adres URL dostarczony przez użytkownika.
Ważne
W tym przykładzie znajduje się pole tekstowe, które akceptuje dane wejściowe użytkownika, co jest potencjalnym zagrożeniem bezpieczeństwa. Domyślnie ASP.NET strony sieci Web weryfikują, czy dane wejściowe użytkownika nie zawierają skryptów ani elementów HTML. Aby uzyskać więcej informacji, zobacz Omówienie luk w zabezpieczeniach skryptów.
<%@ 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>
Uwagi
Klient usługi sieci Web XML może dynamicznie powiązać z usługą sieci Web XML inną niż ta, do której odwołuje się klasa serwera proxy przy użyciu Discover metody . Url Zazwyczaj właściwość odwołuje się do podstawowego adresu usługi sieci Web XML. Jednak przed wywołaniem Discover metody ustaw Url właściwość na adres URL dokumentu odnajdywania. Metoda Discover próbuje znaleźć dopasowanie w dokumencie odnajdywania do powiązania zdefiniowanego w klasie serwera proxy, a następnie dynamicznie powiązać z nim. W przypadku powodzenia kolejne wywołania metody są kierowane do usługi sieci Web XML opisanej w dokumencie odnajdywania.
Jeśli klasa serwera proxy jest kompilowana przy użyciu narzędzia języka opisu usług sieci Web (Wsdl.exe), klasa serwera proxy definiuje powiązanie zaimplementowane przez metody usługi sieci Web XML, które wywołuje przy użyciu klasy WebServiceBindingAttribute. Gdy usługa sieci Web XML implementuje wiele powiązań, Wsdl.exe tworzy klasę serwera proxy dla każdego powiązania. Zastosowana do każdej klasy serwera proxy jest elementem definiującym WebServiceBindingAttribute nazwę powiązania i jej przestrzeni nazw. Dokument odnajdywania ustawiony na Url właściwość musi zawierać odwołanie do usługi sieci Web XML, która implementuje tę samą nazwę powiązania i przestrzeń nazw, lub zgłaszany jest wyjątek.