HttpChannel クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 を使用してリモート処理サーバーとそのクライアントを設定する方法を示しています。 この例には、次の 3 つの部分が含まれています。
サーバー
クライアント
サーバーとクライアントによって使用されるリモート オブジェクト
次のコード例は、サーバーを示しています。
#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);
}
}
注釈
Important
信頼されていないデータを使用してこのクラスからメソッドを呼び出すことは、セキュリティ上のリスクです。 このクラスのメソッドは、信頼できるデータでのみ呼び出します。 詳細については、「すべての入力を検証する」を参照してください。
チャネルは、リモート処理の境界を越えて (たとえば、コンピューターまたはアプリケーション ドメイン間で) メッセージを転送します。 HttpChannel クラスは、HTTP プロトコルを使用してメッセージを転送します。
チャネルは、リモート呼び出しを転送するために、.NET Framework リモート処理インフラストラクチャによって使用されます。 クライアントがリモート オブジェクトを呼び出すと、その呼び出しは、クライアント チャネルによって送信され、サーバー チャネルによって受信されるメッセージにシリアル化されます。 その後、逆シリアル化されて処理されます。 返された値はすべて、サーバー チャネルによって送信され、クライアント チャネルによって受信されます。
HttpChannel オブジェクトには関連付けられた構成プロパティがあり、実行時に構成ファイル内で (静的RemotingConfiguration.Configure メソッドを呼び出すことによって) またはプログラムによって (HttpChannel コンストラクターにIDictionary コレクションを渡すことによって) 設定できます。
コンストラクター
| 名前 | 説明 |
|---|---|
| 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 |
現在のインスタンスを外部リスナー サービスにフックするかどうかを示すブール値を取得します。 |
メソッド
明示的なインターフェイスの実装
| 名前 | 説明 |
|---|---|
| IEnumerable.GetEnumerator() |
チャネル オブジェクトに関連付けられているすべてのプロパティを列挙する IEnumerator を返します。 (継承元 BaseChannelObjectWithProperties) |
拡張メソッド
| 名前 | 説明 |
|---|---|
| AsParallel(IEnumerable) |
クエリの並列化を有効にします。 |
| AsQueryable(IEnumerable) |
IEnumerable を IQueryableに変換します。 |
| Cast<TResult>(IEnumerable) |
IEnumerable の要素を指定した型にキャストします。 |
| OfType<TResult>(IEnumerable) |
指定した型に基づいて、IEnumerable の要素をフィルター処理します。 |