Бөлісу құралы:


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методов , , DiscoverDiscoverAny, ResolveAllи ResolveOneLevelReadAllWriteAll методов.

Это важно

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

Если программный доступ к веб-службам XML не требуется, пакет SDK Windows поставляет средство обнаружения веб-служб (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-адрес, чтобы определить, является ли он документом обнаружения, описанием службы или схемой XSD.

Dispose()

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

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

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

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

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

Download(String)

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

Equals(Object)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Возвращает ответ от синхронного запроса к методу веб-службы 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)

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

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