HttpChannel クラス

メッセージを送信するために HTTP プロトコルを使用する送信者と受信者間のチャネルの実装を提供します。

この型のすべてのメンバの一覧については、HttpChannel メンバ を参照してください。

System.Object
   System.Runtime.Remoting.Channels.BaseChannelObjectWithProperties
      System.Runtime.Remoting.Channels.BaseChannelWithProperties
         System.Runtime.Remoting.Channels.Http.HttpChannel

Public Class HttpChannel
   Inherits BaseChannelWithProperties
   Implements IChannelReceiver, IChannel, IChannelSender, _
   IChannelReceiverHook
[C#]
public class HttpChannel : BaseChannelWithProperties,
   IChannelReceiver, IChannel, IChannelSender, IChannelReceiverHook
[C++]
public __gc class HttpChannel : public BaseChannelWithProperties,
   IChannelReceiver, IChannel, IChannelSender, IChannelReceiverHook
[JScript]
public class HttpChannel extends BaseChannelWithProperties
   implements IChannelReceiver, IChannel, IChannelSender,
   IChannelReceiverHook

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

HttpChannel クラスは結合されたチャネルです。これは便宜のために HttpServerChannelHttpClientChannel を結合します。 HttpChannel は、SOAP プロトコルを使用して、リモート オブジェクトとの間でメッセージを転送します。すべての発信メッセージは、SOAP フォーマッタを経由して渡されます。そのフォーマッタでメッセージは XML に変換された後にシリアル化され、要求する SOAP ヘッダーがストリームに追加されます。バイナリ フォーマッタを指定することもできます。この場合は、バイナリ データ ストリームが生成されます。その後、データ ストリームは HTTP プロトコルを使用して、対象の URI に転送されます。着信メッセージでは、処理が逆になります。

チャネルは、アプリケーション ドメイン、プロセス、コンピュータなどのリモート処理境界を超えて、アプリケーション間でメッセージを転送します。このような転送には、着信と発信の両方があります。現在のチャネルは、エンド ポイントで着信メッセージを待機し、発信メッセージをそのエンド ポイントに送信します。 HttpChannel は、通過するメッセージを XML 形式との間で変換し、HTTP プロトコルを使用してメッセージを送受信します。

クライアント側では、メッセージはクライアント Context チェインを走査した後に、クライアント チャネル シンク チェインに渡されます。通常、最初のチャネル シンクは、メッセージをストリームにシリアル化する IClientFormatterSink です。このストリームは、チャネル シンク チェインからクライアント トランスポート シンクに渡されます。その後、クライアント トランスポート シンクは、このストリームをワイヤに書き込みます。

サーバー側では、サーバー トランスポート シンクは、ワイヤから要求を読み取り、要求ストリームをサーバー チャネル シンク チェインに渡します。このチェインの終端にあるサーバー フォーマッタ シンクは、要求をメッセージに逆シリアル化します。その後、このメッセージをリモート処理インフラストラクチャに渡し、このインフラストラクチャがサーバー Context チェインにディスパッチします。

IChannel 実装は、チャネル構成プロパティを使用して、実行時にチャネルを構成します。チャネル プロパティは、構成ファイルで指定したり、 IDictionary 内でプログラムによって指定したりできます。構成ファイルではすべての値が文字列によって表されますが、 IDictionary プロパティをプログラムによって構築する場合は、値型をネイティブな値または文字列で指定できます。

現在のチャネルに対して指定できるチャネル構成プロパティを次の表に示します。

プロパティ 説明
name チャネルの名前を示します。このプロパティは、 GetChannel を呼び出したときに、指定したチャネルを取得するために使用します。このプロパティが設定されている場合、システムの既定値は "http" になります。複数の HttpChannel を登録する場合は、各チャネルに一意の名前を付ける必要があります。名前を無視するが、名前が競合しないようにする場合は、このプロパティに Empty 文字列 ("") を設定します。システム上に、名前が String.Empty のチャネルはいくつあってもかまいません。
priority このチャネルに割り当てられている優先順位を表す整数。高い数値は、最初に接続に使用される可能性が高いことを示します。既定の優先順位は 1 で、負の数も指定できます。
clientConnectionLimit 指定したサーバーで同時に開くことができる接続の数を示す整数。既定値は 2 です。
proxyName プロキシ コンピュータの名前。
proxyPort プロキシ ポートを指定する整数。
port チャネルが待機するポートを指定する整数。空いているポートをリモート システムが自動的に選択するようにするには、ポート "0" を指定します。これによって、動的に割り当てられたポートで要求を待機する HttpServerChannel のインスタンスが作成されます。これは通常、 HttpServerChannel がコールバック メソッドを確実に待機できるようにするために、クライアント側で実行されます。
supressChannelData true または false 。チャネルが ChannelData に関与しないことを指定します。
useIpAddress true または false 。チャネルが、コンピュータ名ではなく、公開 URL の IP アドレスを使用するかどうかを指定します。
listen true または false 。外部のリスナ サービスにフックするためのアクティベーションを許可するかどうかを指定します。
bindTo 現在のチャネルのバインド先の NIC を指定する現在のコンピュータに解決される IP アドレス。
machineName 現在のチャネルで使用するコンピュータ名を指定する文字列。 useIpAddress 構成プロパティとコンピュータ名のチャネル データをオーバーライドします。

コンピュータの DNS 名を使用する方法が一般的に推奨されますが、特定の NIC (通常は、ワイヤレス NIC) の IP アドレスの変更が頻繁に発生する場合は、machineName を使用するようにアプリケーションを構成し、リモート処理が DNS を通じてコンピュータを見つけ出すことができるようにする必要があります。ただし、コンピュータ名が適切な時間内に解決されず、コンピュータに複数の物理 NIC または仮想 NIC (一般的にはダイアルアップ接続や VPN ネットワーク アダプタで使用される) が設定されている場合は、該当する接続で現在使用されている NIC の IP アドレスを machineName プロパティに設定してください。

timeout 要求がタイムアウトになるまでの期間を指定する整数。要求のタイムアウト期間を無限にするには、-1 を指定します。
allowAutoRedirect サーバー リダイレクトの自動処理が有効かどうかを示す値を取得または設定します。
credentials クライアントの ID を表す ICredential 実装を取得または設定します。
exclusiveAddressUse true または falseSocketOptionName サーバー ソケット オプションに SocketOptionName.ExclusiveAddressUse を設定することによって、サーバー チャネルで他のアプリケーションが同じ IP アドレスとポートの組み合わせを使用できないようにするかどうかを指定します。既定値は true です。

このプロパティは、Windows NT 4.0 Service Pack 4 以降、Windows Millennium Edition、Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003 ファミリの各プラットフォーム上の .NET Framework Version 1.1 でだけサポートされます。

Windows Server 2003 ファミリ以前のプラットフォームの場合、このプロパティには管理者権限が必要です。

useAuthenticatedConnectionSharing 受信呼び出しごとに認証を行うのではなく、認証済みの接続を再利用するようにサーバー チャネルに指示する Boolean 値。既定では、useDefaultCredentials の値を true に設定すると、この値も true に設定されます。それ以外の場合は false に設定されます。false の場合は、サーバーが認証を要求するときに各呼び出しが認証されます。これはプログラムでも同様です。プログラムでは、 IDictionary を実装するオブジェクトを作成して "credentials" 値を CredentialCache.DefaultCredentials に設定し、その値をチャネル シンクに渡すことによって、または ChannelServices.GetChannelSinkProperties メソッドで返される IDictionary を使用することによって、同じ動作が実現されます。

この名前と値のペアは、Windows 98、Windows NT 4.0、Windows Millennium Edition、Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003 ファミリの各プラットフォーム上の .NET Framework Version 1.1 でだけサポートされます。

unsafeAuthenticatedConnectionSharing サーバーが認証接続グループを作成するときに使用するクライアントの資格情報と接続グループ名をクライアントが提供することを示す Boolean 値。この値を true に設定する場合、 connectionGroupName の値は認証済みのユーザー 1 人だけに対応する必要があります。 useAuthenticatedConnectionSharing 値が true に設定されている場合、この名前と値のペアは無視されます。

この名前と値のペアは、Windows 98、Windows NT 4.0、Windows Millennium Edition、Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003 ファミリの各プラットフォーム上の .NET Framework Version 1.1 でだけサポートされます。

connectionGroupName unsafeAuthenticatedConnectionSharing の値も指定する場合に、サーバーで接続グループ名として使用される名前。 unsafeAuthenticatedConnectionSharing が true に設定されていない場合、この名前と値のペアは無視されます。この値を指定した場合は、この名前が認証済みのユーザー 1 人だけに対応することを確認してください。

Windows 98 と Windows Millennium Edition では、認証接続グループ名を識別するためのセキュリティ ID がありません。そのため、これらのプラットフォームでは 1 つの接続グループ名が使用されます。アプリケーションで ICredentials の実装を渡すか、 HttpClientChannel のプロパティの usernamepassworddomain の値を明示的に渡す場合、 unsafeAuthenticatedConnectionSharing の名前/値のペアおよび connectionGroupName の名前/値のペアも渡し、 connectionGroupName の値が 1 人の認証ユーザーにだけ割り当てられていることを確認することによって、接続共有の認証を有効にすることができます。

この名前と値のペアは、Windows 98、Windows NT 4.0、Windows Millennium Edition、Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003 ファミリの各プラットフォーム上の .NET Framework Version 1.1 でだけサポートされます。

使用例

[Visual Basic, C#, C++] HttpChannel を登録して、ポート 9000 で要求を待機する簡単なホスト アプリケーションについては、次のコード例を参照してください。

 
Dim channelProperties As New ListDictionary()
channelProperties.Add("port", 9000)

Dim channel As New HttpChannel(channelProperties, New SoapClientFormatterSinkProvider(), New SoapServerFormatterSinkProvider())
ChannelServices.RegisterChannel(channel)
RemotingConfiguration.RegisterWellKnownServiceType(GetType(SampleService), "MySampleService/SampleService.soap", WellKnownObjectMode.Singleton)

Console.WriteLine("** Press enter to end the server process. **")
Console.ReadLine()

[C#] 
ListDictionary channelProperties = new ListDictionary();

channelProperties.Add("port", 9000);

HttpChannel channel = new HttpChannel(channelProperties,
                                      new SoapClientFormatterSinkProvider(),
                                      new SoapServerFormatterSinkProvider());

ChannelServices.RegisterChannel(channel);

RemotingConfiguration.RegisterWellKnownServiceType(typeof(SampleService), 
                    "MySampleService/SampleService.soap",
                    WellKnownObjectMode.Singleton);

Console.WriteLine("** Press enter to end the server process. **");
Console.ReadLine();

[C++] 
ListDictionary* channelProperties = new ListDictionary();

channelProperties->Add(S"port", __box(9000));

HttpChannel* channel = new HttpChannel(channelProperties,
    new SoapClientFormatterSinkProvider(),
    new SoapServerFormatterSinkProvider());

ChannelServices::RegisterChannel(channel);

RemotingConfiguration::RegisterWellKnownServiceType(__typeof(SampleService), 
    S"MySampleService/SampleService::soap",
    WellKnownObjectMode::Singleton);

Console::WriteLine(S"** Press enter to end the server process. **");
Console::ReadLine();

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Runtime.Remoting.Channels.Http

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Runtime.Remoting (System.Runtime.Remoting.dll 内)

参照

HttpChannel メンバ | System.Runtime.Remoting.Channels.Http 名前空間 | SoapFormatter | BinaryFormatter | チャネルおよびフォーマッタの構成プロパティ