HttpServerChannel Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Реализует канал сервера для удаленных вызовов, в котором для передачи сообщений используется протокол HTTP.
public ref class HttpServerChannel : System::Runtime::Remoting::Channels::BaseChannelWithProperties, System::Runtime::Remoting::Channels::IChannelReceiver, System::Runtime::Remoting::Channels::IChannelReceiverHook
public class HttpServerChannel : System.Runtime.Remoting.Channels.BaseChannelWithProperties, System.Runtime.Remoting.Channels.IChannelReceiver, System.Runtime.Remoting.Channels.IChannelReceiverHook
type HttpServerChannel = class
inherit BaseChannelWithProperties
interface IChannelReceiver
interface IChannel
interface IChannelReceiverHook
Public Class HttpServerChannel
Inherits BaseChannelWithProperties
Implements IChannelReceiver, IChannelReceiverHook
- Наследование
- Реализации
Примеры
В следующем примере кода показано, как использовать HttpServerChannel объект для настройки сервера удаленного взаимодействия и его клиента. Пример состоит из трех частей:
Сервер
Клиент
Удаленный объект, используемый сервером и клиентом
В следующем примере кода показан сервер.
#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;
int main()
{
// Create the server channel.
HttpServerChannel^ serverChannel = gcnew HttpServerChannel( 9090 );
// Register the server channel.
ChannelServices::RegisterChannel( serverChannel );
// Display the channel's scheme.
Console::WriteLine( L"The channel scheme is {0}.", serverChannel->ChannelScheme );
// Display the channel's URI.
Console::WriteLine( L"The channel URI is {0}.", serverChannel->GetChannelUri() );
// Expose an object for remote calls.
RemotingConfiguration::RegisterWellKnownServiceType(
RemoteObject::typeid, L"RemoteObject.rem", WellKnownObjectMode::Singleton );
// Get the channel's sink chain.
IServerChannelSink^ sinkChain = serverChannel->ChannelSinkChain;
Console::WriteLine( L"The type of the server channel's sink chain is {0}.", sinkChain->GetType() );
// See if the channel wants to listen.
bool wantsToListen = serverChannel->WantsToListen;
Console::WriteLine( L"The value of WantsToListen is {0}.", wantsToListen );
// Parse the channel's URI.
array<String^>^ urls = serverChannel->GetUrlsForUri( L"RemoteObject.rem" );
if ( urls->Length > 0 )
{
String^ objectUrl = urls[ 0 ];
String^ objectUri;
String^ channelUri = serverChannel->Parse( objectUrl, objectUri );
Console::WriteLine( L"The object URI is {0}.", objectUri );
Console::WriteLine( L"The channel URI is {0}.", channelUri );
Console::WriteLine( L"The object URL is {0}.", objectUrl );
}
// 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);
// Display the channel's scheme.
Console.WriteLine("The channel scheme is {0}.",
serverChannel.ChannelScheme);
// Display the channel's URI.
Console.WriteLine("The channel URI is {0}.",
serverChannel.GetChannelUri());
// Expose an object for remote calls.
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(RemoteObject), "RemoteObject.rem",
WellKnownObjectMode.Singleton);
// Get the channel's sink chain.
IServerChannelSink sinkChain = serverChannel.ChannelSinkChain;
Console.WriteLine(
"The type of the server channel's sink chain is {0}.",
sinkChain.GetType().ToString());
// See if the channel wants to listen.
bool wantsToListen = serverChannel.WantsToListen;
Console.WriteLine(
"The value of WantsToListen is {0}.",
wantsToListen);
// Parse the channel's URI.
string[] urls = serverChannel.GetUrlsForUri("RemoteObject.rem");
if (urls.Length > 0)
{
string objectUrl = urls[0];
string objectUri;
string channelUri =
serverChannel.Parse(objectUrl, out objectUri);
Console.WriteLine("The object URI is {0}.", objectUri);
Console.WriteLine("The channel URI is {0}.", channelUri);
Console.WriteLine("The object URL is {0}.", objectUrl);
}
// 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^ channel = gcnew HttpClientChannel;
// Register the channel.
ChannelServices::RegisterChannel( channel );
// Register as client for remote object.
WellKnownClientTypeEntry^ remoteType = gcnew WellKnownClientTypeEntry(
RemoteObject::typeid,L"http://localhost:9090/RemoteObject.rem" );
RemotingConfiguration::RegisterWellKnownClientType( remoteType );
// 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 channel = new HttpClientChannel();
// Register the channel.
ChannelServices.RegisterChannel(channel);
// Register as client for remote object.
WellKnownClientTypeEntry remoteType = new WellKnownClientTypeEntry(
typeof(RemoteObject),"http://localhost:9090/RemoteObject.rem");
RemotingConfiguration.RegisterWellKnownClientType(remoteType);
// 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 namespace System;
using namespace System::Runtime::Remoting;
// Remote object.
public ref class RemoteObject: public MarshalByRefObject
{
private:
static int callCount = 0;
public:
int GetCount()
{
callCount++;
return (callCount);
}
};
using System;
using System.Runtime.Remoting;
// Remote object.
public class RemoteObject : MarshalByRefObject
{
private int callCount = 0;
public int GetCount()
{
callCount++;
return(callCount);
}
}
Комментарии
Каналы передают сообщения через границы удаленного взаимодействия (например, между компьютерами в доменах приложений). Класс HttpServerChannel транспортирует сообщения по протоколу HTTP.
Каналы используются инфраструктурой удаленного взаимодействия платформа .NET Framework для передачи удаленных вызовов. Когда клиент выполняет вызов удаленного объекта, вызов сериализуется в сообщение, которое отправляется клиентским каналом и принимается каналом сервера. Затем он десериализуется и обрабатывается. Все возвращаемые значения передаются каналом сервера и принимаются клиентским каналом.
Чтобы выполнить дополнительную обработку сообщений на стороне сервера, можно указать реализацию IServerChannelSinkProvider , через которую передаются все сообщения, обработанные HttpServerChannel .
принимает HttpServerChannel сообщения, сериализованные в двоичном формате или формате SOAP.
Объект HttpServerChannel имеет связанные свойства конфигурации, которые можно задать во время выполнения в файле конфигурации (путем вызова статического RemotingConfiguration.Configure метода) или программно (путем передачи IDictionary коллекции конструктору HttpServerChannel ). Список этих свойств конфигурации см. в документации по HttpServerChannel.
Конструкторы
HttpServerChannel() |
Инициализирует новый экземпляр класса HttpServerChannel. |
HttpServerChannel(IDictionary, IServerChannelSinkProvider) |
Инициализирует новый экземпляр класса HttpServerChannel с указанными свойствами канала и приемником. |
HttpServerChannel(Int32) |
Инициализирует новый экземпляр класса HttpServerChannel, который ожидает передачу данных для указанного порта. |
HttpServerChannel(String, Int32) |
Инициализирует новый экземпляр класса HttpServerChannel с заданным именем, который прослушивает указанный порт. |
HttpServerChannel(String, Int32, IServerChannelSinkProvider) |
Инициализирует новый экземпляр класса HttpServerChannel для указанного порта с заданным именем, который ожидает передачу данных для указанного порта и использует указанный приемник. |
Поля
SinksWithProperties |
Указывает высший приемник в стеке приемников каналов. (Унаследовано от BaseChannelWithProperties) |
Свойства
ChannelData |
Получает данные, относящиеся к каналу. |
ChannelName |
Получает имя текущего канала. |
ChannelPriority |
Получает приоритет текущего канала. |
ChannelScheme |
Получает тип прослушивателя для обработки (например, "http"). |
ChannelSinkChain |
Возвращает цепь приемников канала, которая используется текущим каналом. |
Count |
Возвращает число свойств, связанных с объектом канала. (Унаследовано от BaseChannelObjectWithProperties) |
IsFixedSize |
Возвращает значение, указывающее, фиксировано ли число свойств, которые могут быть введены в объект канала. (Унаследовано от BaseChannelObjectWithProperties) |
IsReadOnly |
Логическое значение, указывающее, является ли коллекция свойств в объекте текущего канала предназначенной только для чтения. (Унаследовано от BaseChannelObjectWithProperties) |
IsSynchronized |
Получает значение, указывающее, синхронизован ли словарь свойств объекта канала. (Унаследовано от BaseChannelObjectWithProperties) |
Item[Object] |
Возвращает заданное свойство канала. |
Keys |
Получает коллекцию ключей ICollection, с которой сопоставлены свойства канала. |
Properties |
Получает словарь IDictionary свойств канала, связанных с объектом текущего канала. (Унаследовано от BaseChannelWithProperties) |
SyncRoot |
Получает объект, который может быть использован для синхронизации доступа к BaseChannelObjectWithProperties. (Унаследовано от BaseChannelObjectWithProperties) |
Values |
Возвращает ICollection значений свойств, с которыми связан объект канала. (Унаследовано от BaseChannelObjectWithProperties) |
WantsToListen |
Получает логическое значение, указывающее, нужно ли связать IChannelReceiverHook со службой внешнего слушателя. |
Методы
Add(Object, Object) |
Создает исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
AddHookChannelUri(String) |
Добавляет универсальный код ресурса (URI), который необходимо прослушать обработчику канала. |
Clear() |
Создает исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
Contains(Object) |
Возвращает значение, указывающее, содержит ли объект текущего канала свойство, связанное с указанным ключом. (Унаследовано от BaseChannelObjectWithProperties) |
CopyTo(Array, Int32) |
Создает исключение NotSupportedException. (Унаследовано от BaseChannelObjectWithProperties) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetChannelUri() |
Возвращает универсальный код ресурса (URI) текущего канала. |
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. |