Поделиться через


DiscoveryClientProtocol Класс

Определение

Обеспечивает поддержку для программного вызова обнаружения веб-служб 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
Наследование

Примеры

В следующем примере кода показана веб-форма, демонстрирующая использование DiscoveryClientProtocol класса вместе с другими классами в System.Web.Services.Discovery пространстве имен для программного вызова обнаружения веб-служб XML. В примере кода демонстрируется Discoverиспользование методов , DiscoverAny, Discover, ResolveAll, ResolveOneLevelи ReadAllWriteAll .

Важно!

В этом примере имеется текстовое поле, принимающее вводимые пользователем данные, что является потенциальной угрозой безопасности. По умолчанию данные, вводимые пользователем на веб-страницах ASP.NET, проверяются на наличие скриптов и HTML-элементов. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.

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

Комментарии

Обнаружение веб-службы XML — это процесс поиска или обнаружения одного или нескольких связанных документов, описывающих доступные веб-службы XML. Именно с помощью обнаружения веб-служб XML клиенты веб-служб XML узнают о доступных веб-службах XML по заданному URL-адресу и о том, как их использовать. Обнаружение веб-служб XML выполняется из того, что вы уже получили URL-адрес документа обнаружения, возможно, через службу каталогов, однако у вас нет сведений о предлагаемых веб-службах XML. С помощью обнаружения веб-служб XML можно получить сведения о веб-службах XML, перечисленных в DiscoveryDocument , по определенному URL-адресу.

Клиент веб-службы XML запускает обнаружение веб-служб XML, предоставляя URL-адрес Discover методам или DiscoverAny . Как правило, этот URL-адрес ссылается на документ обнаружения, который, в свою очередь, ссылается на документы, описывающие одну или несколько веб-служб XML, которые добавляются в References свойство . На этом этапе загружается и проверяется только этот документ, указывающий на допустимые сведения о веб-службах XML. Однако ссылки, содержащиеся в этом документе, на данном этапе не проверяются. Вместо этого они добавляются в References свойство . Чтобы убедиться, что ссылки являются допустимыми, вызовите ResolveAll методы или ResolveOneLevel , которые добавляют допустимые документы, на которые имеются ссылки, в Documents свойство . Наконец, если клиент хочет сохранить результаты обнаружения на диске, вызовите WriteAll метод .

Если программный доступ к обнаружению веб-служб XML не требуется, windows SDK поставляет средство обнаружения веб-служб (Disco.exe) для обнаружения веб-служб XML в командной строке. Дополнительные сведения см. в статье Средство обнаружения веб-служб (Disco.exe).

Конструкторы

DiscoveryClientProtocol()

Инициализирует новый экземпляр класса DiscoveryClientProtocol.

Свойства

AdditionalInformation

Получает сведения в дополнение к ссылкам, найденным в документе обнаружения.

AllowAutoRedirect

Получает или задает возможность клиента автоматически следовать перенаправлениям сервера.

(Унаследовано от HttpWebClientProtocol)
CanRaiseEvents

Возвращает значение, показывающее, может ли компонент вызывать событие.

(Унаследовано от Component)
ClientCertificates

Получает коллекцию сертификатов клиента.

(Унаследовано от HttpWebClientProtocol)
ConnectionGroupName

Возвращает или задает имя группы подключения для запроса.

(Унаследовано от WebClientProtocol)
Container

Возвращает объект IContainer, который содержит коллекцию Component.

(Унаследовано от Component)
CookieContainer

Получает или задает коллекцию файлов Cookie.

(Унаследовано от HttpWebClientProtocol)
Credentials

Получает или задает учетные данные безопасности для проверки подлинности клиента веб-службы XML.

(Унаследовано от WebClientProtocol)
DesignMode

Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.

(Унаследовано от Component)
Documents

Получает коллекцию документов обнаружения.

EnableDecompression

Получает или задает значение, указывающее, включено ли сжатие для данного объекта HttpWebClientProtocol.

(Унаследовано от HttpWebClientProtocol)
Errors

Получает коллекцию исключений, произошедших во время вызова метода из данного класса.

Events

Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.

(Унаследовано от Component)
PreAuthenticate

Получает или задает признак включения предварительной проверки подлинности.

(Унаследовано от WebClientProtocol)
Proxy

Получает или задает информацию о прокси для выполнения запроса веб-службы XML через брандмауэр.

(Унаследовано от HttpWebClientProtocol)
References

Коллекция ссылок, найденных в разрешенных документах обнаружения.

RequestEncoding

Класс Encoding используется для выполнения клиентского запроса к веб-службе XML.

(Унаследовано от WebClientProtocol)
Site

Получает или задает ISite объекта Component.

(Унаследовано от Component)
Timeout

Указывает время (в миллисекундах), в течение которого клиент XML-веб-службы ждет ответа на синхронный запрос XML-веб-службы.

(Унаследовано от WebClientProtocol)
UnsafeAuthenticatedConnectionSharing

Получает или задает значение, указывающее, включено ли совместное использование подключения при работе клиента со средствами проверки подлинности NTLM для соединения с веб-сервером, на котором размещается веб-служба XML.

(Унаследовано от HttpWebClientProtocol)
Url

Получает или задает URL-адрес веб-службы XML, запрашиваемой клиентом.

(Унаследовано от WebClientProtocol)
UseDefaultCredentials

Получает или задает значение, указывающее, должно ли для свойства Credentials устанавливаться значение свойства DefaultCredentials.

(Унаследовано от WebClientProtocol)
UserAgent

Получает или задает значение заголовка агента пользователя, посылаемого с каждым запросом.

(Унаследовано от HttpWebClientProtocol)

Методы

Abort()

Отменяет запрос к методу веб-службы XML.

(Унаследовано от WebClientProtocol)
CancelAsync(Object)

Отменяет асинхронный вызов к методу веб-службы XML, если вызов еще не завершен.

(Унаследовано от HttpWebClientProtocol)
CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
Discover(String)

Обнаруживает указанный URL-адрес и определяет, является ли он документом обнаружения.

DiscoverAny(String)

Обнаруживает указанный URL-адрес, чтобы определить, является ли он документом обнаружения, описанием службы или схемой определения схемы XML (XSD).

Dispose()

Освобождает все ресурсы, занятые модулем Component.

(Унаследовано от Component)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом Component, а при необходимости освобождает также управляемые ресурсы.

(Унаследовано от Component)
Download(String)

Загружает документ обнаружения, расположенный по указанному URL-адресу, в объект Stream.

Download(String, String)

Загружает документ обнаружения, расположенный по указанному URL-адресу, в объект Stream, при этом для параметра contentType будет задано кодирование MIME для документа обнаружения.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Устаревшие..

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

(Унаследовано от MarshalByRefObject)
GetService(Type)

Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.

(Унаследовано от Component)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetWebRequest(Uri)

Создает объект WebRequest для указанного URI-кода.

(Унаследовано от HttpWebClientProtocol)
GetWebResponse(WebRequest)

Возвращает ответ на синхронный запрос к методу веб-службы XML.

(Унаследовано от HttpWebClientProtocol)
GetWebResponse(WebRequest, IAsyncResult)

Возвращает ответ на асинхронный запрос метода веб-службы XML.

(Унаследовано от HttpWebClientProtocol)
InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
LoadExternals()
Устаревшие..

Указывает объекту DiscoveryClientProtocol на необходимость загрузки всех внешних ссылок.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.

(Унаследовано от MarshalByRefObject)
ReadAll(String)

Считывает файл, содержащий карту сохраненных документов обнаружения, и заполняет свойства Documents и References документами обнаружения, схемами определения схемы XML (XSD) и описаниями служб, на которые этот файл содержит ссылки.

ResolveAll()

Разрешает все ссылки на документы обнаружения, схемы определения схем XML (XSD) и описания служб в свойстве References, а также ссылки, найденные в этих документах обнаружения.

ResolveOneLevel()

Разрешает все ссылки на документы обнаружения, схемы определения схем XML (XSD) и описания служб в свойстве References, а также ссылки, найденные в этих документах обнаружения.

ToString()

Возвращает объект String, содержащий имя Component, если оно есть. Этот метод не следует переопределять.

(Унаследовано от Component)
WriteAll(String, String)

Записывает все документы обнаружения, схемы определения схем XML (XSD) и описания служб из свойства Documents в указанный каталог и создает файл в этом каталоге.

События

Disposed

Возникает при удалении компонента путем вызова метода Dispose().

(Унаследовано от Component)

Применяется к

См. также раздел