Condividi tramite


DiscoveryClientProtocol Classe

Definizione

Fornisce supporto per richiamare l'individuazione di servizi Web XML a livello di codice.

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
Ereditarietà

Esempio

L'esempio di codice seguente è un Web Form che illustra come usare la DiscoveryClientProtocol classe insieme alle altre classi nello spazio dei nomi per richiamare a livello di codice l'individuazione System.Web.Services.Discovery dei servizi Web XML. Nell'esempio di codice viene illustrato l'uso dei Discovermetodi , DiscoverAny, DiscoverResolveAll, ResolveOneLevel, ReadAll e WriteAll .

Importante

L'esempio include una casella di testo che accetta l'input dell'utente e rappresenta quindi una potenziale minaccia alla sicurezza. Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML. Per altre informazioni, vedere Cenni preliminari sugli attacchi tramite 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>

Commenti

L'individuazione di servizi Web XML è il processo di individuazione o individuazione di uno o più documenti correlati che descrivono i servizi Web XML disponibili. È tramite l'individuazione dei servizi Web XML che i client del servizio Web XML apprendeno sui servizi Web XML disponibili in un determinato URL e su come usarli. L'individuazione dei servizi Web XML funziona dalla premessa che è già stato ottenuto l'URL di un documento di individuazione, possibilmente tramite un servizio directory, ma non si dispone dei dettagli sui servizi Web XML offerti. Tramite l'individuazione dei servizi Web XML, è possibile individuare i dettagli sui servizi Web XML elencati in un DiscoveryDocument URL specifico.

Un client del servizio Web XML avvia l'individuazione dei servizi Web XML fornendo un URL ai Discover metodi o DiscoverAny . In genere, questo URL fa riferimento a un documento di individuazione, che a sua volta fa riferimento a documenti che descrivono uno o più servizi Web XML, che vengono aggiunti alla References proprietà . A questo punto, solo il documento viene scaricato e verificato in modo da puntare a informazioni valide sui servizi Web XML. Tuttavia, i riferimenti contenuti in tale documento non vengono verificati in questa fase. Vengono invece aggiunti alla References proprietà . Per verificare che i riferimenti siano validi, richiamare i ResolveAll metodi o ResolveOneLevel , che aggiungono documenti di riferimento validi alla Documents proprietà . Infine, se un client vuole salvare i risultati dell'individuazione su disco, richiamare il WriteAll metodo .

Se l'accesso a livello di codice all'individuazione dei servizi Web XML non è necessario, Windows SDK fornisce lo strumento di individuazione dei servizi Web (Disco.exe) per l'individuazione dei servizi Web XML all'interno di un prompt dei comandi. Per altre informazioni, vedere Strumento di individuazione dei servizi Web (Disco.exe).For more details, see Web Services Discovery Tool (Disco.exe).

Costruttori

DiscoveryClientProtocol()

Inizializza una nuova istanza della classe DiscoveryClientProtocol.

Proprietà

AdditionalInformation

Ottiene informazioni in aggiunta ai riferimenti rilevati nel documento di individuazione.

AllowAutoRedirect

Ottiene o imposta se il client segue automaticamente i reindirizzamenti del server.

(Ereditato da HttpWebClientProtocol)
CanRaiseEvents

Ottiene un valore che indica se il componente può generare un evento.

(Ereditato da Component)
ClientCertificates

Ottiene l’insieme di certificati client.

(Ereditato da HttpWebClientProtocol)
ConnectionGroupName

Ottiene o imposta il nome del gruppo di connessione per la richiesta.

(Ereditato da WebClientProtocol)
Container

Ottiene l'oggetto IContainer che contiene Component.

(Ereditato da Component)
CookieContainer

Ottiene o imposta l’insieme di cookie.

(Ereditato da HttpWebClientProtocol)
Credentials

Ottiene o imposta le credenziali di sicurezza per l'autenticazione del client di servizio Web XML.

(Ereditato da WebClientProtocol)
DesignMode

Ottiene un valore che indica se il Component si trova in modalità progettazione.

(Ereditato da Component)
Documents

Ottiene un insieme di documenti di individuazione.

EnableDecompression

Ottiene o imposta un valore che indica se la decompressione è abilitata per questo HttpWebClientProtocol.

(Ereditato da HttpWebClientProtocol)
Errors

Ottiene un insieme di eccezioni generate durante la chiamata del metodo da questa classe.

Events

Ottiene l'elenco dei gestori eventi allegati a questo Component.

(Ereditato da Component)
PreAuthenticate

Ottiene o imposta un valore che indica se la preautenticazione è attivata.

(Ereditato da WebClientProtocol)
Proxy

Ottiene o imposta le informazioni proxy per eseguire una richiesta di servizi Web XML attraverso un firewall.

(Ereditato da HttpWebClientProtocol)
References

Insieme di riferimenti trovati nei documenti di individuazione risolti.

RequestEncoding

La codifica (Encoding) utilizzata per effettuare la richiesta al servizio Web XML.

(Ereditato da WebClientProtocol)
Site

Ottiene o imposta l'oggetto ISite di Component.

(Ereditato da Component)
Timeout

Indica il tempo di attesa di un client del servizio Web XML dell'arrivo della risposta a una richiesta sincrona al servizio Web XML (espresso in millisecondi).

(Ereditato da WebClientProtocol)
UnsafeAuthenticatedConnectionSharing

Ottiene o imposta un valore che indica se la condivisione di connessioni è attivata quando il client utilizza l'autenticazione NTLM per collegarsi al server Web che contiene il servizio Web XML.

(Ereditato da HttpWebClientProtocol)
Url

Ottiene o imposta l'URL di base del servizio Web XML richiesto dal client.

(Ereditato da WebClientProtocol)
UseDefaultCredentials

Ottiene o imposta un valore che indica se impostare la proprietà Credentials sul valore della proprietà DefaultCredentials.

(Ereditato da WebClientProtocol)
UserAgent

Ottiene o imposta il valore dell'intestazione dell'agente utente inviata con ogni richiesta.

(Ereditato da HttpWebClientProtocol)

Metodi

Abort()

Annulla una richiesta a un metodo di servizio Web XML.

(Ereditato da WebClientProtocol)
CancelAsync(Object)

Annulla una chiamata asincrona a un metodo di servizio Web XML, a meno che la chiamata non sia stata già completata.

(Ereditato da HttpWebClientProtocol)
CreateObjRef(Type)

Consente di creare un oggetto che contiene tutte le informazioni rilevanti necessarie per la generazione del proxy utilizzato per effettuare la comunicazione con un oggetto remoto.

(Ereditato da MarshalByRefObject)
Discover(String)

Individua l'URL fornito per determinare se è un documento di individuazione.

DiscoverAny(String)

Individua l'URL fornito per determinare se è un documento di individuazione, una descrizione di servizio o uno schema XSD (XML Schema Definition).

Dispose()

Rilascia tutte le risorse usate da Component.

(Ereditato da Component)
Dispose(Boolean)

Rilascia le risorse non gestite usate da Component e, facoltativamente, le risorse gestite.

(Ereditato da Component)
Download(String)

Esegue il download del documento di individuazione dall'URL fornito in un oggetto Stream.

Download(String, String)

Esegue il download del documento di individuazione dall'URL fornito in un oggetto Stream, impostando il parametro contentType sulla codifica MIME del documento di individuazione.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetLifetimeService()
Obsoleti.

Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza.

(Ereditato da MarshalByRefObject)
GetService(Type)

Consente di restituire un oggetto che rappresenta un servizio fornito da Component o dal relativo Container.

(Ereditato da Component)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetWebRequest(Uri)

Crea un oggetto WebRequest per l'URI specificato.

(Ereditato da HttpWebClientProtocol)
GetWebResponse(WebRequest)

Restituisce una risposta da una richiesta sincrona a un metodo di servizio Web XML.

(Ereditato da HttpWebClientProtocol)
GetWebResponse(WebRequest, IAsyncResult)

Restituire una risposta da una richiesta asincrona a un metodo di servizio Web XML.

(Ereditato da HttpWebClientProtocol)
InitializeLifetimeService()
Obsoleti.

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
LoadExternals()
Obsoleti.

Indica all'oggetto DiscoveryClientProtocol di caricare qualsiasi riferimento esterno.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente.

(Ereditato da MarshalByRefObject)
ReadAll(String)

Legge in un file contenente una mappa dei documenti di individuazione salvati compilando le proprietà Documents e References con documenti di individuazione, schemi XSD (XML Schema Definition) e descrizioni di servizi a cui si fa riferimento nel file.

ResolveAll()

Risolve tutti i riferimenti ai documenti di individuazione, agli schemi XSD (XML Schema Definition) e alle descrizioni di servizi nella proprietà References nonché tutti i riferimenti trovati nei documenti di individuazione a cui si fa riferimento.

ResolveOneLevel()

Risolve tutti i riferimenti ai documenti di individuazione, agli schemi XSD (XML Schema Definition) e alle descrizioni di servizi nella proprietà References nonché tutti i riferimenti trovati nei documenti di individuazione in questione.

ToString()

Restituisce un oggetto String che contiene il nome dell'eventuale oggetto Component. Questo metodo non deve essere sottoposto a override.

(Ereditato da Component)
WriteAll(String, String)

Scrive tutti i documenti di individuazione, gli schemi XSD (XML Schema Definition) e le descrizioni di servizi presenti nella proprietà Documents nella directory fornita e crea un file nella directory.

Eventi

Disposed

Si verifica quando il componente viene eliminato da una chiamata al metodo Dispose().

(Ereditato da Component)

Si applica a

Vedi anche