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


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)

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

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