SoapHttpClientProtocol.Discover Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Dynamisch wordt gekoppeld aan een XML-webservice die wordt beschreven in het detectiedocument op Url.
public:
void Discover();
public void Discover();
member this.Discover : unit -> unit
Public Sub Discover ()
Uitzonderingen
De binding die in de proxyklasse is gedefinieerd, is niet gevonden in het detectiedocument op Url.
– of –
De proxyklasse heeft geen binding gedefinieerd.
Voorbeelden
Het volgende codevoorbeeld is een proxyklasse die wordt gegenereerd met behulp van het hulpprogramma Wsdl.exe voor de Math XML-webservice. A WebServiceBindingAttribute wordt toegepast op de Math proxyklasse die de bindingsnaam MathSoap instelt op en de bijbehorende naamruimte op 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
Het volgende codevoorbeeld is een webserviceclient met behulp van de voorgaande proxyklasse. In het EnterBtn_Click geval van het webformulier roept de XML-webserviceclient de Discover methode aan die probeert dynamisch verbinding te maken met de URL die door de gebruiker is opgegeven.
Important
Dit voorbeeld heeft een tekstvak dat gebruikersinvoer accepteert. Dit is een mogelijke beveiligingsrisico. Standaard valideren ASP.NET webpagina's dat gebruikersinvoer geen script- of HTML-elementen bevat. Zie Overzicht van Script Exploits voor meer informatie.
<%@ 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>
Opmerkingen
Een XML-webserviceclient kan dynamisch worden verbonden met een andere XML-webservice dan de service waarnaar wordt verwezen in de proxyklasse met behulp van de Discover methode. Normaal gesproken verwijst de Url eigenschap naar het basisadres van de XML-webservice. Voordat u de methode aanroept, stelt u de DiscoverUrl eigenschap echter in op een URL van een detectiedocument. De Discover methode probeert een overeenkomst in het detectiedocument te vinden met de binding die is gedefinieerd in de proxyklasse en vervolgens dynamisch aan het document te binden. Als dit lukt, worden volgende methode-aanroepen omgeleid naar de XML-webservice die wordt beschreven in het detectiedocument.
Als de proxyklasse is gebouwd met het hulpprogramma Beschrijvingstaal voor webservices (Wsdl.exe), definieert de proxyklasse de binding die wordt geïmplementeerd door de XML-webservicemethoden die worden aangeroepen met behulp van de WebServiceBindingAttribute. Wanneer een XML-webservice meerdere bindingen implementeert, maakt Wsdl.exe een proxyklasse voor elke binding. Toegepast op elke proxyklasse is een WebServiceBindingAttribute klasse die de naam van de binding en de bijbehorende naamruimte definieert. Het detectiedocument waarop u de Url eigenschap instelt, moet een verwijzing bevatten naar een XML-webservice die dezelfde bindingsnaam en -naamruimte implementeert, of er wordt een uitzondering gegenereerd.