“バインド” .NET Remotingサーバーの特定のチャネル(tcp、http、ipc)へのサービス?
質問
2つのサービスを提供する複雑な.NET Remotingサーバーアプリがあります。クライアントは現在、tcpおよびhttpチャネルを使用してサーバーに接続できます。
今、いくつかの新しい管理サービスを実装する必要がありますが、ローカルマシンへの可用性を制限します。つまり、これらの新しいサービスを使用できる管理ツールを作成しますが、機密データは物理的に残しませんサーバーなので、同じサーバーコンピューターでの管理ツールの実行を制限する必要があります。
新しいサービスを追加し、管理ツールで使用するためにサーバーにipcチャネルを登録することも考えました。ここで問題が発生します。tcpまたはhttpチャネルを使用してこれらの新しい管理サービスに接続するリモートクライアントをどのように防ぐことができますか? 「登録サービスx、アセンブリAのクラスCによって実装され、ipcを介してのみ使用可能」、「登録サービスy、アセンブリAのクラスDによって実装され、tcp / httpを介して使用可能」のように言えますか? app.configで(またはリモートインフラストラクチャクラスを使用して)?
「ipc経由でのみ使用可能」です私を困惑させる部分。 (いいえ、現在、WCFへの移植はオプションではありません。)
解決
RegisterWellKnownServiceTypeには、登録するチャネルを指定できるオーバーロードはなく、IPCServerChannelにサービスを登録するメソッドもないため、いずれも機能しません。
考えられる最善の方法は、メッセージをフィルタリングするか、セキュリティを提供するChannelSinkを作成することです。これらをTcpChannelおよびHttpChannelのコンストラクタに追加して、管理者のみの呼び出しを除外できます。
他のヒント
呼び出し元のサービスのIPAddressを取得します。 127.0.0.1以外の場合は、呼び出しを拒否します。