5

これが私の問題の簡単な例です。ユーザーのセッション内でのみ通信するための WCF サービスを自己ホストするアプリケーションを作成しています。複数のユーザーがターミナル サービス マシンでこのアプリケーションを同時に実行する場合、ローカル管理者権限を持っていない限り、すべてのユーザーが満足します。2 人以上のユーザーが管理者である場合に問題が発生し、最初のユーザーがサービスを作成し、サービスがグローバルに作成されているため 2 番目のユーザーが作成されます...

WCF を使用しない単純な Win32 実装では、"Local\" プレフィックスを持つ名前付きパイプが作成されます。WCF は最初にグローバル共有メモリ マッピングの作成を試みたように見えますが、その後失敗し、次にローカル マッピングを作成します。

ユーザーがローカル管理者であっても、現在のユーザーのセッションに対してローカルな WCF サービスを自己ホストする方法を見つけた人はいますか?

4

1 に答える 1

1

簡単な方法は、各インスタンスが異なるサービス URL を使用するようにすることです (ユーザー セッションの特性から派生させて、セッション ログオン ID などを一意にします)。

WCF バインディングがそのエンドポイントの詳細 (別名、実際のパイプ名) をグローバル名前空間に発行するのを停止するのに十分な特権で実行されている場合、それを停止する方法はありません。ただし、サービスが昇格された特権を持つ管理者として実行されていることがわかった場合は、サービス ホストを開く前に、プロセス トークン特権を調整して SeCreateGlobalPrivilege を無効にすることができます。

于 2013-01-30T23:44:24.347 に答える