SoapHttpClientProtocol.Discover SoapHttpClientProtocol.Discover SoapHttpClientProtocol.Discover SoapHttpClientProtocol.Discover Method

정의

Url의 검색 문서에 설명되어 있는 XML Web services에 동적으로 바인딩합니다.Dynamically binds to an XML Web service described in the discovery document at Url.

public:
 void Discover();
public void Discover ();
member this.Discover : unit -> unit
Public Sub Discover ()

예외

Url의 검색 문서에서 프록시 클래스에 정의된 바인딩을 찾을 수 없습니다.The binding defined in the proxy class could not be found in the discovery document at Url.

또는-or- 프록시 클래스에 정의된 바인딩이 없습니다.The proxy class does not have a binding defined.

예제

다음 코드 예제는 Wsdl.exe 유틸리티를 사용 하 여 생성 한 프록시 클래스는 Math XML 웹 서비스입니다.The following code example is a proxy class generated using the Wsdl.exe utility for the Math XML Web service. A WebServiceBindingAttribute 에 적용 되는 Math 프록시 클래스 바인딩 이름을 설정 MathSoap 및 해당 네임 스페이스를 http://tempuri.org/입니다.A WebServiceBindingAttribute is applied to the Math proxy class setting the binding name to MathSoap and its namespace to 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

다음 코드 예제는 위의 프록시 클래스를 사용 하 여 웹 서비스 클라이언트.The following code example is a Web Service client using the preceding proxy class. 내 합니다 EnterBtn_Click Web Form, XML 웹 서비스 클라이언트 호출의 이벤트는 Discover 사용자가 지정한 URL에 동적으로 바인딩하는 메서드.Within the EnterBtn_Click event of the Web Form, the XML Web service client calls the Discover method attempting to dynamically bind to the URL supplied by the user.

중요

이 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다.This example has a text box that accepts user input, which is a potential security threat. 기본적으로 ASP.NET 웹 페이지는 사용자 입력 내용에 스크립트 또는 HTML 요소가 포함되어 있지 않은지 확인합니다.By default, ASP.NET Web pages validate that user input does not include script or HTML elements. 자세한 내용은 Script Exploits Overview를 참조하세요.For more information, see Script Exploits Overview.

<%@ 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 웹 서비스 클라이언트를 사용 하 여 프록시 클래스에서 참조 된 것과 다른 XML 웹 서비스에 동적으로 바인딩할 수는 Discover 메서드.An XML Web service client can dynamically bind to an XML Web service other than the one referenced in the proxy class using the Discover method. 일반적으로 Url 속성 XML 웹 서비스의 기본 주소를 가리킵니다.Typically, the Url property refers to the base address of the XML Web service. 그러나 호출 하기 전에 합니다 Discover 메서드를 설정 합니다 Url 속성 검색 문서의 URL 합니다.However, before invoking the Discover method, set the Url property to a URL of a discovery document. Discover 메서드는 프록시 클래스에 정의 된 바인딩에 검색 문서에서 일치 하는 것을 동적으로 바인딩할를 시도 합니다.The Discover method attempts to find a match in the discovery document to the binding defined in the proxy class and then dynamically bind to it. 성공 하면 후속 메서드 호출이 검색 문서에 설명 된 XML 웹 서비스에 전달 됩니다.If successful, subsequent method calls are directed to the XML Web service described in the discovery document.

프록시 클래스를 사용 하 여 호출 하는 XML 웹 서비스 메서드를 구현한 바인딩 정의 프록시 클래스는 웹 서비스 기술 언어 도구 (Wsdl.exe)를 사용 하 여 빌드될 경우는 WebServiceBindingAttribute합니다.If the proxy class is built using the Web Services Description Language tool (Wsdl.exe), the proxy class defines the binding implemented by the XML Web service methods it invokes using the WebServiceBindingAttribute. XML 웹 서비스 바인딩이 여러 개를 구현 하는 경우 Wsdl.exe 각 바인딩에 대 한 프록시 클래스를 만듭니다.When an XML Web service implements multiple bindings, Wsdl.exe creates a proxy class for each binding. 각 프록시 클래스에는 적용 된 WebServiceBindingAttribute 바인딩 및 해당 네임 스페이스의 이름을 정의 하는 합니다.Applied to each proxy class is a WebServiceBindingAttribute that defines the name of the binding and its namespace. 설정 검색 문서는 Url 속성을 동일한 바인딩 이름 및 네임 스페이스를 구현 하는 XML 웹 서비스에 대 한 참조를 포함 해야 합니다 또는 예외가 throw 됩니다.The discovery document you set the Url property to must contain a reference to an XML Web service that implements the same binding name and namespace, or an exception is thrown.

적용 대상

추가 정보