複数の同時ユーザーがアプリを実行および実行し、それぞれが着信コールバック イベント メッセージを表示できる必要があるターミナル サーバーで実行されるアプリケーションで、.Net Remoting コールバック用の tcp ポートを開きたいと考えています。現在、ポートを開いてチャンネルをアプリに登録しようとすると、次を使用しています。
private static void RegisterCallBackChannel(int callBackPort)
{
var clientProvider = new BinaryClientFormatterSinkProvider();
var serverProvider = new BinaryServerFormatterSinkProvider
{TypeFilterLevel = TypeFilterLevel.Full};
IDictionary props = new Hashtable();
var chanNm = string.Format("CallBackChanPort:{0}", callBackPort);
props["port"] = callBackPort;
props["name"] = chanNm;
props["typeFilterLevel"] = TypeFilterLevel.Full;
if (ChannelServices.RegisteredChannels.Any(
chn => chn is TcpChannel && chn.ChannelName == chanNm))
return;
var chan = new TcpChannel(props, clientProvider, serverProvider);
ChannelServices.RegisterChannel(chan, true);
}
これは最初のユーザーに対しては機能しますが、2 番目の同時ユーザーがユーザー セッションでアプリを起動すると、.Net コードに ChannelServices.RegisteredChannels
は最初のユーザーが開いたチャネルは含まれませんが、もちろんコード行
var chan = new TcpChannel(props, clientProvider, serverProvider);
異なるユーザー セッションであっても、同じマシンの同じポートで 2 つのチャネルを開くことができないため、失敗します。
どうすればいいですか?特定のポートがすでに開いているかどうかを検出できたとしても、あるユーザー セッションのアプリケーションは、別のユーザー セッションから作成されたチャネルで着信イベント メッセージを表示できますか??