HttpChannel Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Реализует канал клиента для удаленных вызовов, в котором для передачи сообщений используется протокол HTTP.
public ref class HttpChannel : System::Runtime::Remoting::Channels::BaseChannelWithProperties, System::Runtime::Remoting::Channels::IChannelReceiver, System::Runtime::Remoting::Channels::IChannelReceiverHook, System::Runtime::Remoting::Channels::IChannelSender
public ref class HttpChannel : System::Runtime::Remoting::Channels::BaseChannelWithProperties, System::Runtime::Remoting::Channels::IChannelReceiver, System::Runtime::Remoting::Channels::IChannelReceiverHook, System::Runtime::Remoting::Channels::IChannelSender, System::Runtime::Remoting::Channels::ISecurableChannel
public class HttpChannel : System.Runtime.Remoting.Channels.BaseChannelWithProperties, System.Runtime.Remoting.Channels.IChannelReceiver, System.Runtime.Remoting.Channels.IChannelReceiverHook, System.Runtime.Remoting.Channels.IChannelSender
public class HttpChannel : System.Runtime.Remoting.Channels.BaseChannelWithProperties, System.Runtime.Remoting.Channels.IChannelReceiver, System.Runtime.Remoting.Channels.IChannelReceiverHook, System.Runtime.Remoting.Channels.IChannelSender, System.Runtime.Remoting.Channels.ISecurableChannel
type HttpChannel = class
inherit BaseChannelWithProperties
interface IChannelReceiver
interface IChannelSender
interface IChannel
interface IChannelReceiverHook
type HttpChannel = class
inherit BaseChannelWithProperties
interface IChannelReceiver
interface IChannelSender
interface IChannel
interface IChannelReceiverHook
interface ISecurableChannel
type HttpChannel = class
inherit BaseChannelWithProperties
interface IChannelReceiver
interface IChannel
interface IChannelSender
interface IChannelReceiverHook
interface ISecurableChannel
Public Class HttpChannel
Inherits BaseChannelWithProperties
Implements IChannelReceiver, IChannelReceiverHook, IChannelSender
Public Class HttpChannel
Inherits BaseChannelWithProperties
Implements IChannelReceiver, IChannelReceiverHook, 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);
}
}
Комментарии
Важно!
Вызов методов этого класса для ненадежных данных представляет угрозу безопасности. Вызывайте методы класса только для надежных данных. Дополнительные сведения см. в разделе Проверка всех входных данных.
Каналы передают сообщения через границы удаленного взаимодействия (например, между компьютерами или доменами приложений). Класс HttpChannel транспортирует сообщения по протоколу HTTP.
Каналы используются инфраструктурой удаленного взаимодействия .NET Framework для передачи удаленных вызовов. Когда клиент выполняет вызов удаленного объекта, вызов сериализуется в сообщение, которое отправляется клиентским каналом и принимается каналом сервера. Затем он десериализируется и обрабатывается. Все возвращаемые значения передаются каналом сервера и принимаются клиентским каналом.
Объект HttpChannel имеет связанные свойства конфигурации, которые можно задать во время выполнения в файле конфигурации (путем вызова статического RemotingConfiguration.Configure метода) или программно (путем передачи IDictionary коллекции конструктору HttpChannel ). Список этих свойств конфигурации см. в разделе Свойства конфигурации канала и модуля форматирования.
Конструкторы
HttpChannel() |
Инициализирует новый экземпляр класса HttpChannel. |
HttpChannel(IDictionary, IClientChannelSinkProvider, IServerChannelSinkProvider) |
Инициализирует новый экземпляр класса HttpChannel с указанными свойствами конфигурации и приемником. |
HttpChannel(Int32) |
Инициализирует новый экземпляр класса HttpChannel с каналом сервера, который ожидает передачу данных для указанного порта межпроцессного взаимодействия. |
Поля
SinksWithProperties |
Указывает высший приемник в стеке приемников каналов. (Унаследовано от BaseChannelWithProperties) |
Свойства
ChannelData |
Получает данные для указанного канала. |
ChannelName |
Получает имя текущего канала. |
ChannelPriority |
Получает приоритет текущего канала. |
ChannelScheme |
Получает тип прослушивателя для обработки (например, "http"). |
ChannelSinkChain |
Возвращает цепь приемников канала, которая используется текущим каналом. |
Count |
Возвращает число свойств, связанных с объектом канала. (Унаследовано от BaseChannelObjectWithProperties) |
IsFixedSize |
Возвращает значение, указывающее, фиксировано ли число свойств, которые могут быть введены в объект канала. (Унаследовано от BaseChannelObjectWithProperties) |
IsReadOnly |
Логическое значение, указывающее, является ли коллекция свойств в объекте текущего канала предназначенной только для чтения. (Унаследовано от BaseChannelObjectWithProperties) |
IsSecured |
Возвращает или задает логическое значение, позволяющее определить, является ли текущий канал безопасным. |
IsSynchronized |
Получает значение, указывающее, синхронизован ли словарь свойств объекта канала. (Унаследовано от BaseChannelObjectWithProperties) |
Item[Object] |
Возвращает заданное свойство канала. |
Keys |
Получает коллекцию ключей ICollection, с которой сопоставлены свойства канала. |
Properties |
Получает словарь IDictionary свойств канала, сопоставленных текущему каналу. |
SyncRoot |
Получает объект, который может быть использован для синхронизации доступа к BaseChannelObjectWithProperties. (Унаследовано от BaseChannelObjectWithProperties) |
Values |
Возвращает ICollection значений свойств, с которыми связан объект канала. (Унаследовано от BaseChannelObjectWithProperties) |
WantsToListen |
Получает логическое значение, указывающее, требуется ли обработка текущего экземпляра в службе внешнего прослушивателя. |
Методы
Add(Object, Object) |
Создает исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
AddHookChannelUri(String) |
Добавляет универсальный код ресурса (URI), который необходимо прослушать обработчику канала. |
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) |
GetUrlsForUri(String) |
Возвращает массив всех URL-адресов объекта с указанным универсальным кодом ресурса (URI), относящихся к текущему объекту HttpChannel. |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
Parse(String, String) |
Выделяет универсальный код ресурса (URI) канала и универсальный код ресурса (URI) известного удаленного объекта из указанного URL-адреса. |
Remove(Object) |
Создает исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
StartListening(Object) |
Дает текущему каналу команду на отслеживание запросов. |
StopListening(Object) |
Дает текущему каналу команду на прекращение отслеживания запросов. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
IEnumerable.GetEnumerator() |
Возвращает IEnumerator, который перечисляет все свойства, связанные с объектом канала. (Унаследовано от BaseChannelObjectWithProperties) |
Методы расширения
Cast<TResult>(IEnumerable) |
Приводит элементы объекта IEnumerable к заданному типу. |
OfType<TResult>(IEnumerable) |
Выполняет фильтрацию элементов объекта IEnumerable по заданному типу. |
AsParallel(IEnumerable) |
Позволяет осуществлять параллельный запрос. |
AsQueryable(IEnumerable) |
Преобразовывает коллекцию IEnumerable в объект IQueryable. |