HttpClientChannel Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Реализует клиентский канал для удаленных вызовов, использующих протокол HTTP для передачи сообщений.
public ref class HttpClientChannel : System::Runtime::Remoting::Channels::BaseChannelWithProperties, System::Runtime::Remoting::Channels::IChannelSender
public ref class HttpClientChannel : System::Runtime::Remoting::Channels::BaseChannelWithProperties, System::Runtime::Remoting::Channels::IChannelSender, System::Runtime::Remoting::Channels::ISecurableChannel
public class HttpClientChannel : System.Runtime.Remoting.Channels.BaseChannelWithProperties, System.Runtime.Remoting.Channels.IChannelSender
public class HttpClientChannel : System.Runtime.Remoting.Channels.BaseChannelWithProperties, System.Runtime.Remoting.Channels.IChannelSender, System.Runtime.Remoting.Channels.ISecurableChannel
type HttpClientChannel = class
inherit BaseChannelWithProperties
interface IChannelSender
interface IChannel
type HttpClientChannel = class
inherit BaseChannelWithProperties
interface IChannelSender
interface IChannel
interface ISecurableChannel
Public Class HttpClientChannel
Inherits BaseChannelWithProperties
Implements IChannelSender
Public Class HttpClientChannel
Inherits BaseChannelWithProperties
Implements IChannelSender, ISecurableChannel
- Наследование
- Реализации
Примеры
В следующем примере кода показано, как настроить HttpClientChannel сервер удаленного взаимодействия и его клиент. Пример содержит три части:
Сервер
Клиент
Удаленный объект, используемый сервером и клиентом
В следующем примере кода показан сервер.
#using <System.dll>
#using <System.Runtime.Remoting.dll>
#using "common.dll"
using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Http;
void main()
{
// Create the server channel.
HttpServerChannel^ serverChannel = gcnew HttpServerChannel( 9090 );
// Register the server channel.
ChannelServices::RegisterChannel( serverChannel );
// Expose an object for remote calls.
RemotingConfiguration::RegisterWellKnownServiceType( RemoteObject::typeid, L"RemoteObject.rem", WellKnownObjectMode::Singleton );
// Wait for the user prompt.
Console::WriteLine( L"Press ENTER to exit the server." );
Console::ReadLine();
Console::WriteLine( L"The server is exiting." );
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
public class Server
{
public static void Main(string[] args)
{
// Create the server channel.
HttpServerChannel serverChannel = new HttpServerChannel(9090);
// Register the server channel.
ChannelServices.RegisterChannel(serverChannel);
// Expose an object for remote calls.
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(RemoteObject), "RemoteObject.rem",
WellKnownObjectMode.Singleton);
// Wait for the user prompt.
Console.WriteLine("Press ENTER to exit the server.");
Console.ReadLine();
Console.WriteLine("The server is exiting.");
}
}
В следующем примере кода показан клиент для этого сервера.
#using <System.dll>
#using <System.Runtime.Remoting.dll>
#using "common.dll"
using namespace System;
using namespace System::Runtime::Remoting;
using namespace System::Runtime::Remoting::Channels;
using namespace System::Runtime::Remoting::Channels::Http;
void main()
{
// Create the channel.
HttpClientChannel^ clientChannel = gcnew HttpClientChannel;
// Register the channel.
ChannelServices::RegisterChannel( clientChannel );
// Register as client for remote object.
WellKnownClientTypeEntry^ remoteType = gcnew WellKnownClientTypeEntry( RemoteObject::typeid,L"http://localhost:9090/RemoteObject.rem" );
RemotingConfiguration::RegisterWellKnownClientType( remoteType );
// Create a message sink.
String^ objectUri;
System::Runtime::Remoting::Messaging::IMessageSink^ messageSink = clientChannel->CreateMessageSink( L"http://localhost:9090/RemoteObject.rem", nullptr, objectUri );
Console::WriteLine( L"The URI of the message sink is {0}.", objectUri );
if ( messageSink != nullptr )
{
Console::WriteLine( L"The type of the message sink is {0}.", messageSink->GetType() );
}
// Display the channel's properties using Keys and Item.
for each(String^ key in clientChannel->Keys)
{
Console::WriteLine("clientChannel[{0}] = <{1}>", key, clientChannel[key]);
}
// Parse the channel's URI.
String^ objectUrl = L"http://localhost:9090/RemoteObject.rem";
String^ channelUri = clientChannel->Parse( objectUrl, objectUri );
Console::WriteLine( L"The object URL is {0}.", objectUrl );
Console::WriteLine( L"The object URI is {0}.", objectUri );
Console::WriteLine( L"The channel URI is {0}.", channelUri );
// Create an instance of the remote object.
RemoteObject^ service = gcnew RemoteObject;
// Invoke a method on the remote object.
Console::WriteLine( L"The client is invoking the remote object." );
Console::WriteLine( L"The remote object has been called {0} times.", service->GetCount() );
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
public class Client
{
public static void Main(string[] args)
{
// Create the channel.
HttpClientChannel clientChannel = new HttpClientChannel();
// Register the channel.
ChannelServices.RegisterChannel(clientChannel);
// Register as client for remote object.
WellKnownClientTypeEntry remoteType =
new WellKnownClientTypeEntry(typeof(RemoteObject),
"http://localhost:9090/RemoteObject.rem");
RemotingConfiguration.RegisterWellKnownClientType(remoteType);
// Create a message sink.
string objectUri;
System.Runtime.Remoting.Messaging.IMessageSink messageSink =
clientChannel.CreateMessageSink(
"http://localhost:9090/RemoteObject.rem",
null, out objectUri);
Console.WriteLine(
"The URI of the message sink is {0}.",
objectUri);
if (messageSink != null)
{
Console.WriteLine("The type of the message sink is {0}.",
messageSink.GetType().ToString());
}
// Display the channel's properties using Keys and Item.
foreach(string key in clientChannel.Keys)
{
Console.WriteLine(
"clientChannel[{0}] = <{1}>",
key, clientChannel[key]);
}
// Parse the channel's URI.
string objectUrl = "http://localhost:9090/RemoteObject.rem";
string channelUri = clientChannel.Parse(objectUrl, out objectUri);
Console.WriteLine("The object URL is {0}.", objectUrl);
Console.WriteLine("The object URI is {0}.", objectUri);
Console.WriteLine("The channel URI is {0}.", channelUri);
// Create an instance of the remote object.
RemoteObject service = new RemoteObject();
// Invoke a method on the remote object.
Console.WriteLine("The client is invoking the remote object.");
Console.WriteLine("The remote object has been called {0} times.",
service.GetCount());
}
}
В следующем примере кода показан удаленный объект, используемый сервером и клиентом.
#using <System.dll>
using namespace System;
using namespace System::Runtime::Remoting;
// Remote object.
public ref class RemoteObject: public MarshalByRefObject
{
private:
static int callCount = 0;
public:
int GetCount()
{
Console::WriteLine( L"GetCount was called." );
callCount++;
return (callCount);
}
};
using System;
using System.Runtime.Remoting;
// Remote object.
public class RemoteObject : MarshalByRefObject
{
private int callCount = 0;
public int GetCount()
{
Console.WriteLine("GetCount was called.");
callCount++;
return(callCount);
}
}
Комментарии
Это важно
Вызов методов из этого класса с ненадежными данными является угрозой безопасности. Вызовите методы из этого класса только с доверенными данными. Дополнительные сведения см. в разделе Проверка всех входных данных.
Каналы транспорта сообщений через границы удаленного взаимодействия (например, между компьютерами или доменами приложений). Класс HttpClientChannel переносит сообщения с помощью протокола HTTP.
Каналы используются инфраструктурой удаленного взаимодействия .NET Framework для передачи удаленных вызовов. Когда клиент вызывает удаленный объект, вызов сериализуется в сообщение, которое отправляется клиентским каналом и получается каналом сервера. Затем она десериализируется и обрабатывается. Все возвращаемые значения передаются каналом сервера и получаются клиентским каналом.
Чтобы выполнить дополнительную обработку сообщений на стороне клиента, можно указать реализацию IClientChannelSinkProvider , через которую передаются HttpClientChannel все сообщения.
По умолчанию используется HttpServerChannel средство форматирования SOAP для сериализации всех сообщений.
Объект HttpClientChannel имеет связанные свойства конфигурации, которые можно задать во время выполнения в файле конфигурации (путем вызова статического RemotingConfiguration.Configure метода) или программно (путем передачи IDictionary коллекции конструктору HttpClientChannel ).
Конструкторы
| Имя | Описание |
|---|---|
| HttpClientChannel() |
Инициализирует новый экземпляр класса HttpClientChannel. |
| HttpClientChannel(IDictionary, IClientChannelSinkProvider) |
Инициализирует новый экземпляр HttpClientChannel класса с указанными свойствами конфигурации и приемником. |
| HttpClientChannel(String, IClientChannelSinkProvider) |
Инициализирует новый экземпляр HttpClientChannel класса с указанным именем и приемником. |
Поля
| Имя | Описание |
|---|---|
| SinksWithProperties |
Указывает верхний приемник канала в стеке приемника канала. (Унаследовано от BaseChannelWithProperties) |
Свойства
| Имя | Описание |
|---|---|
| ChannelName |
Возвращает имя текущего канала. |
| ChannelPriority |
Возвращает приоритет текущего канала. |
| Count |
Возвращает количество свойств, связанных с объектом канала. (Унаследовано от BaseChannelObjectWithProperties) |
| IsFixedSize |
Возвращает значение, указывающее, является ли число свойств, которые можно ввести в объект канала. (Унаследовано от BaseChannelObjectWithProperties) |
| IsReadOnly |
Возвращает значение, указывающее, доступна ли коллекция свойств в объекте канала только для чтения. (Унаследовано от BaseChannelObjectWithProperties) |
| IsSecured |
Возвращает или задает, является ли клиентский канал защищенным. |
| IsSynchronized |
Возвращает значение, указывающее, синхронизирован ли словарь свойств объекта канала. (Унаследовано от BaseChannelObjectWithProperties) |
| Item[Object] |
Возвращает указанное свойство канала. |
| Keys |
ICollection Возвращает ключи, с которыми связаны свойства канала. |
| Properties |
IDictionary Возвращает свойства канала, связанные с текущим объектом канала. (Унаследовано от BaseChannelWithProperties) |
| SyncRoot |
Получает объект, используемый для синхронизации доступа к объекту BaseChannelObjectWithProperties. (Унаследовано от BaseChannelObjectWithProperties) |
| Values |
ICollection Возвращает значения свойств, связанных с объектом канала. (Унаследовано от BaseChannelObjectWithProperties) |
Методы
| Имя | Описание |
|---|---|
| Add(Object, Object) |
Формирует исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
| Clear() |
Формирует исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
| Contains(Object) |
Возвращает значение, указывающее, содержит ли объект канала свойство, связанное с указанным ключом. (Унаследовано от BaseChannelObjectWithProperties) |
| CopyTo(Array, Int32) |
Формирует исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
| CreateMessageSink(String, Object, String) |
Возвращает приемник сообщений канала, который доставляет сообщения в указанный URL-адрес или объект данных канала. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetEnumerator() |
Возвращает перечисление IDictionaryEnumerator всех свойств, связанных с объектом канала. (Унаследовано от BaseChannelObjectWithProperties) |
| GetHashCode() |
Служит в качестве хэш-функции по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| Parse(String, String) |
Извлекает URI канала и URI удаленного известного объекта из указанного URL-адреса. |
| Remove(Object) |
Формирует исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IEnumerable.GetEnumerator() |
Возвращает перечисление IEnumerator всех свойств, связанных с объектом канала. (Унаследовано от BaseChannelObjectWithProperties) |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |