Comparteix a través de


DiscoveryClientProtocol Clase

Definición

Proporciona compatibilidad para invocar mediante programación el proceso de descubrimiento de servicios Web XML.

public ref class DiscoveryClientProtocol : System::Web::Services::Protocols::HttpWebClientProtocol
public class DiscoveryClientProtocol : System.Web.Services.Protocols.HttpWebClientProtocol
type DiscoveryClientProtocol = class
    inherit HttpWebClientProtocol
Public Class DiscoveryClientProtocol
Inherits HttpWebClientProtocol
Herencia

Ejemplos

El siguiente ejemplo de código es un formulario web que muestra cómo usar la DiscoveryClientProtocol clase junto con las demás clases del System.Web.Services.Discovery espacio de nombres para invocar mediante programación la detección de servicios web XML. En el ejemplo de código se muestra el uso de los Discovermétodos , DiscoverAny, ResolveAllDiscover, , ResolveOneLevel, ReadAll y WriteAll .

Importante

Este ejemplo tiene un cuadro de texto que acepta datos proporcionados por el usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, ASP.NET Web Pages valida que los datos proporcionados por el usuario no incluyen elementos HTML ni de script. Para más información, consulte Información general sobre los ataques mediante scripts.

<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Web.Services.Discovery" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Data" %>

<HTML>
<HEAD>
   <SCRIPT RUNAT="SERVER">
   protected void Discover_Click(object Source, EventArgs e)
   {
    // Specify the URL to discover.
    string sourceUrl = DiscoURL.Text;
    // Specify the URL to save discovery results to or read from.
    string outputDirectory = DiscoDir.Text;

        DiscoveryClientProtocol client = new DiscoveryClientProtocol();
    // Use default credentials to access the URL being discovered.
        client.Credentials = CredentialCache.DefaultCredentials;

        try {
          DiscoveryDocument doc;
      // Check to see if whether the user wanted to read in existing discovery results.
      if (DiscoverMode.Value == "ReadAll") 
          {
         DiscoveryClientResultCollection results = client.ReadAll(Path.Combine(DiscoDir.Text,"results.discomap"));
            SaveMode.Value = "NoSave";						
      }
      else 
          {
        // Check to see if whether the user wants the capability to discover any kind of discoverable document.
        if (DiscoverMode.Value == "DiscoverAny") 
            {
          doc = client.DiscoverAny(sourceUrl);
            }
        else
        // Discover only discovery documents, which might contain references to other types of discoverable documents.
            {
          doc = client.Discover(sourceUrl);
        }
        // Check to see whether the user wants to resolve all possible references from the supplied URL.
        if (ResolveMode.Value == "ResolveAll")
           client.ResolveAll();
        else 
            {
        // Check to see whether the user wants to resolve references nested more than one level deep.
            if (ResolveMode.Value == "ResolveOneLevel")  
               client.ResolveOneLevel();
            else
           Status.Text = String.Empty;
            }
          }
        }
        catch ( Exception e2) 
        {
          DiscoveryResultsGrid.Columns.Clear();
          Status.Text = e2.Message;
        }
    // If documents were discovered, display the results in a data grid.
        if (client.Documents.Count > 0)
        PopulateGrid(client);

    // If the user also asked to have the results saved to the Web server, do so.
        if (SaveMode.Value == "Save") 
        {
          DiscoveryClientResultCollection results = client.WriteAll(outputDirectory, "results.discomap");
      Status.Text = "The following file holds the links to each of the discovery results: <b>" + 
                                    Path.Combine(outputDirectory,"results.discomap") + "</b>";
        }
                             
     
      }

      protected void PopulateGrid(DiscoveryClientProtocol client) 
      {
         DataTable dt = new DataTable();
         DataRow dr;
 
         dt.Columns.Add(new DataColumn("Discovery Document"));
         dt.Columns.Add(new DataColumn("References"));
         dt.Columns.Add(new DataColumn("Type"));


         foreach (DictionaryEntry entry in client.Documents) 
         {
                dr = dt.NewRow();
        dr[0] = (string) entry.Key;
        dr[2] = entry.Value.GetType();
        dt.Rows.Add(dr);
        if (entry.Value is DiscoveryDocument)
        {
          DiscoveryDocument discoDoc = (DiscoveryDocument) entry.Value;
          foreach (DiscoveryReference discoref in discoDoc.References)
          {
            dr = dt.NewRow();
            dr[1] = discoref.Url;
            dr[2] = discoref.GetType();
            dt.Rows.Add(dr);
           }
        }
        
         }
        DataView dv = new DataView(dt);
    DiscoveryResultsGrid.DataSource = (ICollection) dv;
    DiscoveryResultsGrid.DataBind();
      
    }
  </SCRIPT>
  </HEAD> 
  <BODY>
    <H3> <p align="center"> Discovery Class Sample </p> </H3>
        <FORM RUNAT="SERVER">
    <hr>	
     Enter the URL to discover:
        <asp:textbox id=DiscoURL Columns=60 runat="SERVER" /><p>

       Discovery Mode:
       <select id="DiscoverMode" size=1 runat="SERVER">
         <option Value="DiscoverAny">Discover any of the discovery types</option>
             <option Value="Discover">Discover just discovery documents</option>
             <option Value="ReadAll">Read in saved discovery results</option>
    </select> <p>

       Resolve References Mode:
       <select id="ResolveMode" size=1 runat="SERVER">
             <option Value="ResolveAll">Resolve all references</option>
             <option Value="ResolveOneLevel">Resolve references only in discovery documents within the supplied URL</option>
             <option Value="ResolveNone">Do not resolve references</option>
    </select> <p>
        
       Save Results Mode:
    <select id="SaveMode" size=1 runat="SERVER">
         <option Value="NoSave">Do not save any of the discovery documents found locally</option>
             <option Value="Save">Save the discovery documents found locally</option>
        </select> <p>
        Enter the directory to Read/Save the Discovery results:
        <asp:textbox id=DiscoDir runat="SERVER" /> <p>

    <p align="center"> <asp:Button id=Discover Text="Discover!" onClick="Discover_Click" runat="SERVER"/> </p><p>

        <hr>
        <asp:label id="Status" runat="SERVER" /><p>
     <asp:DataGrid id="DiscoveryResultsGrid"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AutoGenerateColumns="true"
           runat="server">

         <HeaderStyle BackColor="DarkBlue" ForeColor="White">
         </HeaderStyle>

         <AlternatingItemStyle BackColor="LightYellow">
         </AlternatingItemStyle>

     </asp:DataGrid>
        </FORM>
  </BODY>
<%@ Page Language="VB" Debug="true" %>

<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Web.Services.Discovery" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.Data" %>

<HTML>
<HEAD>
   <SCRIPT RUNAT="SERVER">
   Public Sub Discover_Click(Source As Object, e as EventArgs )
      ' Specify the URL to discover.
      Dim sourceUrl as String = DiscoURL.Text
      ' Specify the URL to save discovery results to or read from.
      Dim outputDirectory As String = DiscoDir.Text

      Dim client as DiscoveryClientProtocol = new DiscoveryClientProtocol()
      ' Use default credentials to access the URL being discovered.
      client.Credentials = CredentialCache.DefaultCredentials
      Try 
        Dim doc As DiscoveryDocument
        ' Check to see whether the user wanted to read in existing discovery results.
    If (DiscoverMode.Value = "ReadAll") Then
       Dim results As DiscoveryClientResultCollection 
           results = client.ReadAll(Path.Combine(DiscoDir.Text,"results.discomap"))
       SaveMode.Value = "NoSave"						
    Else
       ' Check to see whether the user user wants the capability to discover any kind of discoverable document.
           If (DiscoverMode.Value = "DiscoverAny") Then
         doc = client.DiscoverAny(sourceUrl)
           Else
         ' Discover only discovery documents, which might contain references to other types of discoverable documents. 
         doc = client.Discover(sourceUrl)
       End If
           
           ' Check to see whether the user wants to resolve all possible references from the supplied URL.
       If (ResolveMode.Value = "ResolveAll") Then
          client.ResolveAll()
           ' Check to see whether the user wants to resolve references nested more than one level deep.
       ElseIf (ResolveMode.Value = "ResolveOneLevel")  Then
              client.ResolveOneLevel()
       Else
          Status.Text = String.Empty
           End If
    End If
            
       Catch e2 As Exception
          DiscoveryResultsGrid.Columns.Clear()
          Status.Text = e2.Message
       End Try

       ' If documents were discovered, display the results in a data grid.
       If (client.Documents.Count > 0) Then
            'populate our Grid with the discovery results.
        PopulateGrid(client)
       End If

       ' If the user also asked to have the results saved to the Web server, do so.	    
       If (SaveMode.Value = "Save") Then
      Dim results As DiscoveryClientResultCollection 
          results = client.WriteAll(outputDirectory, "results.discomap")
          Status.Text = "The following file holds the links to each of the discovery results: <b>" + _ 
                                     Path.Combine(outputDirectory,"results.discomap") + "</b>"
       End If                             

      End Sub
      Public Sub PopulateGrid(client As DiscoveryClientProtocol) 
         Dim dt As DataTable = new DataTable()
         Dim dr AS DataRow 
 
         dt.Columns.Add(new DataColumn("Discovery Document") )
         dt.Columns.Add(new DataColumn("References") )
         dt.Columns.Add(new DataColumn("Type") )

     Dim entry As DictionaryEntry
         For Each entry in client.Documents
            dr = dt.NewRow()
        dr(0) = entry.Key
        dr(2) = entry.Value.GetType()
        dt.Rows.Add(dr)
        If TypeOf entry.Value Is DiscoveryDocument Then
           Dim discoDoc As DiscoveryDocument = entry.Value
           Dim discoref As DiscoveryReference
           For Each discoref in discoDoc.References
          dr = dt.NewRow()
          dr(1) = discoref.Url
          dr(2) = discoref.GetType()
          dt.Rows.Add(dr)
           Next
        End If   
    Next 	
         
        Dim dv As DataView = new DataView(dt)
    DiscoveryResultsGrid.DataSource = dv
    DiscoveryResultsGrid.DataBind()
     End Sub
  </SCRIPT>
  </HEAD> 
  <BODY>
    <H3> <p align="center"> Discovery Class Sample </p> </H3>
        <FORM RUNAT="SERVER">

    <hr>	
        Enter the URL to discover:
        <asp:textbox id=DiscoURL Columns=60 runat="SERVER" /><p>

       Discovery Mode:
       <select id="DiscoverMode" size=1 runat="SERVER">
         <option Value="DiscoverAny">Discover any of the discovery types</option>
             <option Value="Discover">Discover just discovery documents</option>
             <option Value="ReadAll">Read in saved discovery results</option>
    </select> <p>

       Resolve References Mode:
       <select id="ResolveMode" size=1 runat="SERVER">
          <option Value="ResolveAll">Resolve all references</option>
             <option Value="ResolveOneLevel">Resolve references only in discovery documents within the supplied URL</option>
             <option Value="ResolveNone">Do not resolve references</option>
    </select> <p>
        
       Save Results Mode:
    <select id="SaveMode" size=1 runat="SERVER">
          <option Value="NoSave">Do not save any of the discovery documents found locally</option>
             <option Value="Save">Save the discovery documents found locally</option>
        </select> <p>
        Enter the directory to Read/Save the Discovery results:
        <asp:textbox id=DiscoDir runat="SERVER" /> <p>


    <p align="center"> <asp:Button id=Discover Text="Discover!" onClick="Discover_Click" runat="SERVER"/> </p><p>

        <hr>
        <asp:label id="Status" runat="SERVER" /><p>
     <asp:DataGrid id="DiscoveryResultsGrid"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AutoGenerateColumns="true"
           runat="server">

         <HeaderStyle BackColor="DarkBlue" ForeColor="White">
         </HeaderStyle>

         <AlternatingItemStyle BackColor="LightYellow">
         </AlternatingItemStyle>

     </asp:DataGrid>
        </FORM>
  </BODY>

Comentarios

La detección de servicios web XML es el proceso de buscar, o detectar, uno o varios documentos relacionados que describen los servicios web XML disponibles. Es a través de la detección de servicios web XML que los clientes de servicios web XML aprenden sobre los servicios web XML disponibles en una dirección URL determinada y cómo usarlos. La detección de servicios web XML funciona desde la premisa de que ya ha obtenido la dirección URL a un documento de detección, posiblemente a través de un servicio de directorio, pero no tiene los detalles sobre los servicios web XML ofrecidos. A través de la detección de servicios web XML, puede detectar los detalles sobre los servicios web XML enumerados en una DiscoveryDocument dirección URL específica.

Un cliente de servicio web XML inicia la detección de servicios web XML proporcionando una dirección URL a los Discover métodos o DiscoverAny . Normalmente, esta dirección URL hace referencia a un documento de detección, que a su vez hace referencia a documentos que describen uno o varios servicios web XML, que se agregan a la References propiedad . En ese momento, solo se descarga y comprueba ese documento para que apunte a información válida sobre los servicios web XML. Sin embargo, las referencias contenidas en ese documento no se comprueban en esta fase. En su lugar, se agregan a la References propiedad . Para comprobar que las referencias son válidas, invoque los ResolveAll métodos o ResolveOneLevel , que agregan documentos de referencia válidos a la Documents propiedad . Por último, si un cliente quiere guardar los resultados de detección en el disco, invoque el WriteAll método .

Si no se necesita acceso mediante programación a la detección de servicios web XML, Windows SDK envía la herramienta de detección de servicios web (Disco.exe) para detectar servicios web XML en un símbolo del sistema. Para obtener más información, consulte Herramienta de detección de servicios web (Disco.exe).

Constructores

DiscoveryClientProtocol()

Inicializa una nueva instancia de la clase DiscoveryClientProtocol.

Propiedades

AdditionalInformation

Obtiene información además de las referencias encontradas en el documento de descubrimiento.

AllowAutoRedirect

Obtiene o establece si el cliente sigue de forma automática las redirecciones del servidor.

(Heredado de HttpWebClientProtocol)
CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.

(Heredado de Component)
ClientCertificates

Obtiene la colección de certificados del cliente.

(Heredado de HttpWebClientProtocol)
ConnectionGroupName

Obtiene o establece el nombre del grupo de conexiones para la solicitud.

(Heredado de WebClientProtocol)
Container

Obtiene la interfaz IContainer que contiene la clase Component.

(Heredado de Component)
CookieContainer

Obtiene o establece la colección de cookies.

(Heredado de HttpWebClientProtocol)
Credentials

Obtiene o establece credenciales de seguridad para la autenticación del cliente de servicios Web XML.

(Heredado de WebClientProtocol)
DesignMode

Obtiene un valor que indica si Component está actualmente en modo de diseño.

(Heredado de Component)
Documents

Obtiene una colección de documentos de descubrimiento.

EnableDecompression

Obtiene o establece un valor que indica si la descompresión está habilitada para este HttpWebClientProtocol.

(Heredado de HttpWebClientProtocol)
Errors

Obtiene una colección de excepciones que se han producido durante la invocación al método desde esta clase.

Events

Obtiene la lista de controladores de eventos asociados a Component.

(Heredado de Component)
PreAuthenticate

Obtiene o establece si la autenticación previa está habilitada.

(Heredado de WebClientProtocol)
Proxy

Obtiene o establece la información de proxy necesaria para realizar una solicitud de servicios Web XML a través de un firewall.

(Heredado de HttpWebClientProtocol)
References

Colección de referencias encontradas en documentos de descubrimiento resueltos.

RequestEncoding

La instancia de Encoding que se utiliza para realizar la solicitud de cliente al servicio Web XML.

(Heredado de WebClientProtocol)
Site

Obtiene o establece ISite de Component.

(Heredado de Component)
Timeout

Indica el tiempo, en milisegundos, que un cliente de servicios Web XML espera a que llegue una respuesta a una solicitud de servicio Web XML sincrónica.

(Heredado de WebClientProtocol)
UnsafeAuthenticatedConnectionSharing

Obtiene o establece un valor que indica si está habilitada la conexión compartida cuando el cliente utiliza la autenticación NTLM para conectarse al servidor Web que hospeda el servicio Web XML.

(Heredado de HttpWebClientProtocol)
Url

Obtiene o establece la dirección URL base del servicio Web XML que el cliente solicita.

(Heredado de WebClientProtocol)
UseDefaultCredentials

Obtiene o establece un valor que indica si se establece la propiedad Credentials en el valor de la propiedad DefaultCredentials.

(Heredado de WebClientProtocol)
UserAgent

Obtiene o establece el valor del encabezado del agente de usuario que se envía con cada solicitud.

(Heredado de HttpWebClientProtocol)

Métodos

Abort()

Cancela una solicitud a un método de servicios Web XML.

(Heredado de WebClientProtocol)
CancelAsync(Object)

Cancela una llamada asincrónica a un método de servicios Web XML, a menos que la llamada ya haya finalizado.

(Heredado de HttpWebClientProtocol)
CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
Discover(String)

Detecta la dirección URL suministrada para determinar si se trata de un documento de descubrimiento.

DiscoverAny(String)

Detecta la dirección URL suministrada para determinar si se trata de un documento de descubrimiento, de una descripción de servicios o de un esquema XSD (lenguaje de definición de esquemas XML).

Dispose()

Libera todos los recursos que usa Component.

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados que usa Component y, de forma opcional, libera los recursos administrados.

(Heredado de Component)
Download(String)

Descarga el documento de descubrimiento localizado en la dirección URL suministrada en un objeto Stream.

Download(String, String)

Descarga el documento de descubrimiento localizado en la dirección URL suministrada en un objeto Stream, estableciendo el parámetro contentType en la codificación MIME del documento de descubrimiento.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetWebRequest(Uri)

Crea WebRequest para la dirección URI especificada.

(Heredado de HttpWebClientProtocol)
GetWebResponse(WebRequest)

Devuelve una respuesta de una solicitud sincrónica a un método de servicios Web XML.

(Heredado de HttpWebClientProtocol)
GetWebResponse(WebRequest, IAsyncResult)

Devuelve una respuesta de una solicitud asincrónica a un método de servicios Web XML.

(Heredado de HttpWebClientProtocol)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
LoadExternals()
Obsoletos.

Indica al objeto DiscoveryClientProtocol que cargue cualquier referencia externa.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.

(Heredado de MarshalByRefObject)
ReadAll(String)

Lee en un archivo que contiene un mapa de los documentos de descubrimiento guardados y rellena las propiedades Documents y References con documentos de descubrimiento, esquemas XSD (lenguaje de definición de esquemas XML) y descripciones de servicios a los que se hace referencia en el archivo.

ResolveAll()

Resuelve todas las referencias a documentos de descubrimiento, esquemas XSD (lenguaje de definición de esquemas XML) y descripciones de servicios en la propiedad References, así como las referencias encontradas en los documentos de descubrimiento a los que se hace referencia.

ResolveOneLevel()

Resuelve todas las referencias a documentos de descubrimiento, esquemas XSD (lenguaje de definición de esquemas XML) y descripciones de servicios en References, así como las referencias encontradas en dichos documentos de descubrimiento.

ToString()

Devuelve una String que contiene el nombre del Component, si existe. Este método no se debe invalidar.

(Heredado de Component)
WriteAll(String, String)

Escribe todos los documentos de descubrimiento, esquemas XSD (lenguaje de definición de esquemas XML) y descripciones de servicios de la propiedad Documents en el directorio suministrado, y crea un archivo en ese directorio.

Eventos

Disposed

Tiene lugar cuando una llamada elimina el componente mediante una llamada al método Dispose().

(Heredado de Component)

Se aplica a

Consulte también