DiscoveryClientProtocol Classe

Definição

Dá suporte para invocar programaticamente a 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 a System.Web.Services.Discovery seguir é um Formulário Web que demonstra como usar a DiscoveryClientProtocol classe junto com as outras classes no namespace para invocar programaticamente a descoberta de serviços Web XML. O exemplo de código demonstra o uso dos Discovermétodos , DiscoverAny, Discover, ReadAll ResolveAllResolveOneLevele .WriteAll

Importante

Este exemplo tem uma caixa de texto que aceita a entrada do usuário, que é uma ameaça à segurança em potencial. Por padrão, ASP.NET páginas da Web validam que a entrada do usuário não inclui elementos HTML ou script. Para obter mais informações, consulte Visão geral de explorações de script.

<%@ 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>

Comentários

A descoberta do serviço Web XML é o processo de localizar ou descobrir um ou mais documentos relacionados que descrevem os serviços Web XML disponíveis. É por meio da descoberta de serviços Web XML que os clientes de serviço Web XML aprendem sobre os serviços Web XML disponíveis em uma determinada URL e como usá-los. A descoberta de serviços Web XML funciona do local em que você já obteve a URL para um documento de descoberta, possivelmente por meio de um serviço de diretório, no entanto, você não tem os detalhes sobre os serviços Web XML oferecidos. Por meio da descoberta de serviços Web XML, você pode descobrir os detalhes sobre os serviços Web XML listados em uma DiscoveryDocument URL específica.

Um cliente de serviço Web XML inicia a descoberta de serviços Web XML fornecendo uma URL para os métodos ou DiscoverAny os Discover métodos. Normalmente, essa URL se refere 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, somente esse documento é baixado e verificado para apontar para informações válidas sobre serviços Web XML. No entanto, as referências contidas nesse documento não são verificadas nesta fase. Em vez disso, eles são adicionados à References propriedade. Para verificar se as referências são válidas, invoque os ResolveAll métodos ou ResolveOneLevel os métodos que adicionam documentos referenciados válidos à Documents propriedade. Por fim, se um cliente quiser salvar os resultados da descoberta no disco, invoque o WriteAll método.

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

Construtores

DiscoveryClientProtocol()

Inicializa uma nova instância da classe DiscoveryClientProtocol.

Propriedades

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 redirecionamentos do servidor.

(Herdado de HttpWebClientProtocol)
CanRaiseEvents

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

(Herdado de Component)
ClientCertificates

Obtém a coleção de certificados do cliente.

(Herdado de HttpWebClientProtocol)
ConnectionGroupName

Obtém ou define o nome do grupo de conexões para a solicitação.

(Herdado de WebClientProtocol)
Container

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

(Herdado de Component)
CookieContainer

Obtém ou define a coleção de cookies.

(Herdado de HttpWebClientProtocol)
Credentials

Obtém ou define as credenciais de segurança para a autenticação de cliente do serviço Web XML.

(Herdado de WebClientProtocol)
DesignMode

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

(Herdado de Component)
Documents

Obtém uma coleção de documentos de descoberta.

EnableDecompression

Obtém ou define um valor que indica se a descompactação está habilitada 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 manipuladores de eventos que estão anexados a este Component.

(Herdado de Component)
PreAuthenticate

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

(Herdado de WebClientProtocol)
Proxy

Obtém ou define informações de proxy para fazer uma solicitação de serviço Web XML por um firewall.

(Herdado de HttpWebClientProtocol)
References

Uma coleção de referências encontradas em documentos de descoberta resolvido.

RequestEncoding

O Encoding usado para fazer a solicitação do cliente para o serviço Web XML.

(Herdado de WebClientProtocol)
Site

Obtém ou define o ISite do Component.

(Herdado de Component)
Timeout

Indica o tempo que um cliente do serviço Web XML aguarda a resposta até que uma solicitação síncrona de serviço Web XML seja recebida (em milissegundos).

(Herdado de WebClientProtocol)
UnsafeAuthenticatedConnectionSharing

Obtém ou define um valor que indica se o compartilhamento de conexão está habilitado quando o cliente usa a autenticação NTLM para se conectar ao servidor Web que hospeda o serviço Web XML.

(Herdado de HttpWebClientProtocol)
Url

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

(Herdado de WebClientProtocol)
UseDefaultCredentials

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

(Herdado de WebClientProtocol)
UserAgent

Obtém ou define o valor para o cabeçalho de agente do usuário enviado com cada solicitação.

(Herdado de HttpWebClientProtocol)

Métodos

Abort()

Cancela uma solicitação 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 todas as informações relevantes necessárias para gerar um proxy usado para se 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 ela é um documento de descoberta, uma descrição do serviço ou um esquema de definição de esquema de XSD (definição de esquema XML).

Dispose()

Libera todos os recursos usados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Libera os recursos não gerenciados usados pelo Component e opcionalmente libera os recursos gerenciados.

(Herdado de Component)
Download(String)

Baixa o documento de descoberta na URL fornecida em um objeto Stream.

Download(String, String)

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

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância.

(Herdado de MarshalByRefObject)
GetService(Type)

Retorna 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)

Retorna uma resposta de uma solicitação síncrona para um método de serviço Web XML.

(Herdado de HttpWebClientProtocol)
GetWebResponse(WebRequest, IAsyncResult)

Retorna uma resposta de uma solicitação assíncrona para um método de serviço Web XML.

(Herdado de HttpWebClientProtocol)
InitializeLifetimeService()
Obsoleto.

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
LoadExternals()
Obsoleto.

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

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.

(Herdado de MarshalByRefObject)
ReadAll(String)

Lê um arquivo que contém um mapa de documentos de descoberta salvo populando as propriedades Documents e References com documentos de descoberta, esquemas de XSD (definição de esquema XML) e descrições do serviço referenciadas no arquivo.

ResolveAll()

Resolve todas as referências a documentos de descoberta, esquemas de XSD (definição de esquema XML) e descrições de serviços na propriedade References, bem como referências encontradas nos documentos de descoberta referenciados.

ResolveOneLevel()

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

ToString()

Retorna um String que contém o nome do Component, se houver. Esse método não deve ser substituído.

(Herdado de Component)
WriteAll(String, String)

Grava todos os documentos de descoberta, esquemas de XSD (definição de esquema XML) e descrições de serviços na propriedade Documents para o diretório fornecido e cria um arquivo nesse diretório.

Eventos

Disposed

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

(Herdado de Component)

Aplica-se a

Confira também