私たちは同様の状況を抱えており、必要なときにのみチャネルを登録し、それを完了した直後に登録を解除することにしました。接続するADO.NETの切断モデルと同様に、切断する。 documentationパー
:
- チャンネルごとのアプリケーションドメインごとに登録されています。単一の プロセスに複数のアプリケーションドメインを含めることができます。プロセスが終了すると、 によって登録されたすべてのチャネルが自動的に破棄されます。
- チャネル 名前は、アプリケーションドメイン内で一意である必要があります。たとえば、 デフォルトのチャネルに名前があるため、1つのアプリケーションドメインに2つのHttpChannel オブジェクトを登録するには、登録する前に チャネルの名前を変更する必要があります。次のC#コード例 がこれを実証しています。あなたは何度も より特定のポートでリッスンするチャネルを登録することはできません
IDictionary prop = new Hashtable();
prop["name"] = "http1";
prop["port"] = "9001";
ChannelServices.RegisterChannel(new HttpChannel(prop, null, null));
- 。たとえチャネルが アプリケーションドメイン単位で登録されていても、同じマシン上の異なるアプリケーションドメインは同じ ポートで同じチャネルをリスンすることはできません。
- ポートが使用可能かどうかわからない場合は、チャネルのポートを設定するときに0 (ゼロ)を使用してください。リモートシステム が利用可能なポートを選択します。
- クライアントは登録済みのチャネルを使用して リモートオブジェクトと通信できます。リモーティングシステム は、 クライアントがオブジェクトに接続しようとすると、リモートオブジェクトが正しいチャネルに確実に接続されます。 をリモートオブジェクトと通信しようとする前に、クライアントはChannelServices.RegisterChannelを呼び出すために、 を担当しています。コールバック関数が必要な場合は、 クライアントはチャネルとポートを登録する必要があります。
ので、チャンネルの名前は、あなたのapplicaitonドメイン内で一意である必要があり、設計によって、一つだけのHTTPチャネルは、一度に1つのポートを持つことができます。同じポートに2つの異なるチャネルを持つことはできません。
Davidありがとうございます。しかし、登録を解除したチャンネルを使用しようとするリクエストはどうなりますか?それは問題ではないですか? –
はい。唯一のオプションは、2つの異なるチャネルに2つの異なるチャネルを登録することです。同じポート上で複数のチャンネルを開くことはできないため、(サーバーとして)リッスンするポートには1つのチャレンジャーがあり、別のチャンネルを使用して(クライアントとして)他のサーバーに呼び出すことができます。 – David
クライアントとして、 "port"または "proxyPort"を設定する必要がありますか?サーバーは変更を加える必要がありますか? –