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, IServerChannelSinkProvider) |
Инициализирует новый экземпляр HttpServerChannel класса на указанном порту с заданным именем, который прослушивает указанный порт и использует указанный приемник. |
| HttpServerChannel(String, Int32) |
Инициализирует новый экземпляр 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) |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |