DiscoveryClientProtocol Classe

Definição

Fornece suporte para invocação programática da descoberta de serviços 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
Herança

Exemplos

O exemplo de código seguinte é um Formulário Web que demonstra como usar a DiscoveryClientProtocol classe juntamente com as outras classes no System.Web.Services.Discovery namespace para invocar programaticamente a descoberta de serviços Web XML. O exemplo de código demonstra o uso dos Discovermétodos , DiscoverAny, Discover, ResolveAll, ResolveOneLevel, e ReadAllWriteAll .

Importante

Este exemplo tem uma caixa de texto que aceita a entrada do utilizador, o que constitui uma potencial ameaça à segurança. Por defeito, as páginas Web do ASP.NET validam que a entrada do utilizador não inclui elementos de script ou HTML. Para mais informações, consulte Visão Geral dos Exploits de 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>

Observações

A descoberta de serviços Web XML é o processo de localizar, ou descobrir, um ou mais documentos relacionados que descrevem os serviços Web XML disponíveis. É através da descoberta de serviços Web XML que os clientes de serviços Web XML aprendem sobre os serviços Web XML disponíveis numa determinada URL e como os utilizar. A descoberta de serviços Web XML parte do princípio de que já obteve o URL de um documento de descoberta, possivelmente através de um serviço de diretório, no entanto, não tem os detalhes sobre os serviços Web XML oferecidos. Através da descoberta de serviços Web XML, pode descobrir detalhes sobre os serviços Web XML listados num DiscoveryDocument URL específico.

Um cliente de serviço Web XML inicia a descoberta de serviços Web XML fornecendo uma URL para os Discover métodos ou.DiscoverAny Normalmente, este URL refere-se a um documento de descoberta, que por sua vez se refere a documentos que descrevem um ou mais serviços Web XML, que são adicionados à References propriedade. Nesse ponto, apenas esse documento é descarregado e verificado para apontar para informações válidas sobre serviços Web XML. No entanto, as referências contidas nesse documento não estão verificadas nesta fase. Em vez disso, são adicionados à References propriedade. Para verificar se as referências são válidas, invoce os ResolveAll métodos ou ResolveOneLevel , que adicionam documentos referenciados válidos à Documents propriedade. Por fim, se um cliente quiser guardar os resultados da descoberta no disco, invoca o WriteAll método.

Se não for necessário acesso programático à descoberta de serviços Web XML, o SDK Windows disponibiliza a ferramenta de Descoberta de Serviços Web (Disco.exe) para descobrir serviços Web XML dentro de um prompt de comandos. Para mais detalhes, consulte Ferramenta de Descoberta de Serviços Web (Disco.exe).

Construtores

Name Description
DiscoveryClientProtocol()

Inicializa uma nova instância da DiscoveryClientProtocol classe.

Propriedades

Name Description
AdditionalInformation

Obtém informações além das referências encontradas no documento de descoberta.

AllowAutoRedirect

Obtém ou define se o cliente segue automaticamente os redirecionamentos do servidor.

(Herdado de HttpWebClientProtocol)
CanRaiseEvents

Obtém um valor que indica se o componente pode gerar um evento.

(Herdado de Component)
ClientCertificates

Recebe a coleção de certificados de clientes.

(Herdado de HttpWebClientProtocol)
ConnectionGroupName

Obtém ou define o nome do grupo de ligação para o pedido.

(Herdado de WebClientProtocol)
Container

Obtém o IContainer que contém o Component.

(Herdado de Component)
CookieContainer

Recebe ou define a coleção de bolachas.

(Herdado de HttpWebClientProtocol)
Credentials

Obtém ou definem credenciais de segurança para a autenticação de clientes de serviços Web XML.

(Herdado de WebClientProtocol)
DesignMode

Obtém um valor que indica se o Component está atualmente em modo de design.

(Herdado de Component)
Documents

Recebe uma coleção de documentos de descoberta.

EnableDecompression

Obtém ou define um valor que indica se a descompressão está ativada para este HttpWebClientProtocol.

(Herdado de HttpWebClientProtocol)
Errors

Obtém uma coleção de exceções que ocorreram durante a invocação do método desta classe.

Events

Obtém a lista de gestores de eventos que estão ligados a isto Component.

(Herdado de Component)
PreAuthenticate

Obtém ou define se a pré-autenticação está ativada.

(Herdado de WebClientProtocol)
Proxy

Obtém ou define informação proxy para fazer um pedido de serviço Web XML através de um firewall.

(Herdado de HttpWebClientProtocol)
References

Uma coleção de referências encontrada em documentos de descoberta resolvidos.

RequestEncoding

Eles Encoding eram usados para fazer o pedido do cliente ao serviço Web XML.

(Herdado de WebClientProtocol)
Site

Obtém ou define o ISite do Component.

(Herdado de Component)
Timeout

Indica o tempo em que um cliente de serviço Web XML espera pela resposta a um pedido síncrono de serviço Web XML (em milissegundos).

(Herdado de WebClientProtocol)
UnsafeAuthenticatedConnectionSharing

Recebe ou define um valor que indica se a partilha de ligação está ativada quando o cliente utiliza autenticação NTLM para se ligar ao servidor Web que aloja o serviço Web XML.

(Herdado de HttpWebClientProtocol)
Url

Obtém ou define a URL base do serviço Web XML que o cliente está a solicitar.

(Herdado de WebClientProtocol)
UseDefaultCredentials

Obtém ou define um valor que indica se deve definir a Credentials propriedade para o valor da DefaultCredentials propriedade.

(Herdado de WebClientProtocol)
UserAgent

Recebe ou define o valor do cabeçalho do agente de utilizador que é enviado com cada pedido.

(Herdado de HttpWebClientProtocol)

Métodos

Name Description
Abort()

Cancela um pedido para um método de serviço Web XML.

(Herdado de WebClientProtocol)
CancelAsync(Object)

Cancela uma chamada assíncrona para um método de serviço Web XML, a menos que a chamada já tenha sido concluída.

(Herdado de HttpWebClientProtocol)
CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Discover(String)

Descobre a URL fornecida para determinar se é um documento de descoberta.

DiscoverAny(String)

Descobre a URL fornecida para determinar se é um documento de descoberta, descrição de serviço ou um esquema XML Schema Definition (XSD).

Dispose()

Liberta todos os recursos utilizados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo Component e opcionalmente liberta os recursos geridos.

(Herdado de Component)
Download(String, String)

Descarrega o documento de descoberta na URL fornecida para um Stream objeto, definindo o contentType parâmetro para a codificação MIME do documento de descoberta.

Download(String)

Descarrega o documento de descoberta na URL fornecida para um Stream objeto.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetService(Type)

Devolve um objeto que representa um serviço fornecido pelo Component ou pelo seu Container.

(Herdado de Component)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetWebRequest(Uri)

Cria um WebRequest para o URI especificado.

(Herdado de HttpWebClientProtocol)
GetWebResponse(WebRequest, IAsyncResult)

Retorna uma resposta de um pedido assíncrono para um método de serviço Web XML.

(Herdado de HttpWebClientProtocol)
GetWebResponse(WebRequest)

Retorna uma resposta de um pedido síncrono para um método de serviço Web XML.

(Herdado de HttpWebClientProtocol)
InitializeLifetimeService()

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
LoadExternals()
Obsoleto.

Instrui o DiscoveryClientProtocol objeto a carregar quaisquer referências externas.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
ReadAll(String)

Lê num ficheiro contendo um mapa de documentos de descoberta guardados que preenchem as Documents propriedades e References com documentos de descoberta, esquemas XML Schema Definition (XSD) e descrições de serviço referenciadas no ficheiro.

ResolveAll()

Resolve todas as referências a documentos de descoberta, esquemas XML Schema Definition (XSD) e descrições de serviços na References propriedade, bem como referências encontradas em documentos de descoberta referenciados.

ResolveOneLevel()

Resolve todas as referências a documentos de descoberta, esquemas XML Schema Definition (XSD) e descrições de serviços em References, bem como referências encontradas nesses documentos de descoberta.

ToString()

Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado.

(Herdado de Component)
WriteAll(String, String)

Escreve todos os documentos de descoberta, esquemas XML Schema Definition (XSD) e descrições de serviço na Documents propriedade do diretório fornecido e cria um ficheiro nesse diretório.

evento

Name Description
Disposed

Ocorre quando o componente é eliminado por uma chamada ao Dispose() método.

(Herdado de Component)

Aplica-se a

Ver também