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 объект, задав |
| 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) |