3

.Net Remotingを使用して、マスターサービスと小さなクライアントライブラリの多数の(場合によっては50以上の)インスタンスとの間のプロセス内通信を処理しています。セキュリティの観点から、サービスはローカルマシンからの接続のみを受け入れ、他の誰も受け入れないことが不可欠です。それでも、これを行う方法に関する情報は見つかりません。また、MSDNドキュメントはあまり役に立たないようです。

できれば、ユーザーのファイアウォールアラートを引き起こさない方法でローカルホストへの接続を維持したいのですが...これは必須の機能ではありません。

ご協力ありがとうございました!

トム

4

2 に答える 2

4

IpcChannelのドキュメントを調べているときに、自分でこれに遭遇しました。

IpcChannelの問題は、クライアントが低整合性プロセスとして実行されている場合、Windows名前付きパイプがUACで正しく機能しないことです。残念ながら、私は完全なアプリではなくプラグインに取り組んでいるため、プラグインホストの整合性が低いということは、Vistaに固有の新しいAPIを含む多数のWin32 APIを呼び出し、プログラムでアプリトークンACLを設定することを意味します。本当にやりたくない。

幸いなことに、RegisterChannel()のオーバーロードされた形式のいくつかでは、System.Collections.IDictionary Hashtableオブジェクトでオプションを指定できます。それらのいくつかは、セキュリティとリモート接続の処理に関係しています。詳細はこちら:

http://msdn.microsoft.com/en-us/library/bb187434%28VS.85%29.aspx

最終的にコードをTcpChannel実装に戻し、サーバー内のいくつかの変更を加えましたが、正常に機能しています。汗かいていない!

            System.Collections.IDictionary sProperties = new System.Collections.Hashtable();

        sProperties["port"] = SERVER_PORT;
        sProperties["authorizedGroup"] = "INTERACTIVE";
        sProperties["rejectRemoteRequests"] = true;

        BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();

        TcpServerChannel channel = new TcpServerChannel(sProperties, serverProvider);   
        ChannelServices.RegisterChannel(channel, false);

あなたの答えを取り除いて申し訳ありませんが、私は私の質問に正確に答える何かに出くわしました。

トム

于 2009-11-16T08:30:45.940 に答える
2

.NET 2.0 以降を使用しているIpcChannel場合は、を使用します。プロセス間通信用に設計されており、TCP をまったく使用しません。

于 2009-10-07T22:22:10.970 に答える