Поделиться через


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.

Применяется к

См. также раздел