RemoteApp ActiveX を使用すると奇妙な問題が発生します...
背景: RemoteApp を介して GUI アプリケーションを実行する特定のシナリオで、リモート デスクトップ セッション ホストの負荷テストを実行しようとしています。ほとんどの場合、このシナリオの最大ユーザー密度は興味深いものです。これは、本番環境で、セッション ホストのユーザー数が ~450 に達すると (CPU とメモリが最大に達しない状態で)、ユーザーが RemoteApp 接続エラーを受け取り始めることを確認したためです。
したがって、問題を再現/デバッグするために、次のようなサンプル テストをセットアップします。
- クライアント ホストにテスト ユーザー (User1..User2..User3...User1000) を配置し、サーバー ホスト (RD セッション ホスト) に接続して独自の RemoteApp インスタンス/セッションを呼び出す
- クライアント ホストで X 秒ごとにもう 1 人のユーザーを起動するため、接続負荷は徐々に増加します。
異なるユーザー アカウントで複数の RemoteApp セッションを呼び出そうとする単純な C# アプリケーションを実装しました。(そのために 1000 ユーザー アカウントを事前に生成しました)
問題は次のとおりです。セッションを次々に作成すると、RemoteApp を実行する最初のセッションは User 1で適切に認証され、別の資格情報 ( User 2、 User 3など) を指定しても、次の呼び出されたセッションが実行されますが、まだ同じユーザー1で認証されています(ただし、ユーザー 2、ユーザー 3 などであると予想されます...)。したがって、基本的にサーバー側 (RD セッション ホスト側) では、User1 のみがログインし、その下で実行されているアプリの複数のコピーが表示されます。
そのため、どこかでユーザー名がキャッシュされますが、どこにあるのかわかりません:(
背後にあるコードは次のとおりです。
メインループ:
for (int i = from; i < to; i++)
{
LaunchRDPSnapIn(i);
Thread.Sleep(period);
}
ランチャー機能:
static void LaunchRDPSnapIn(int number)
{
var rdpFileName = "SomeRemoteAppFile.rdp";
var rdpFileContents = File.ReadAllText(rdpFileName);
var rdpFile = new RDPFile(rdpFileContents);
var msRdpClientShellType = Type.GetTypeFromProgID("MsRdpWebAccess.MsRdpClientShell");
if (msRdpClientShellType != null)
{
dynamic shell = Activator.CreateInstance(msRdpClientShellType);
dynamic workspace = shell.MsRdpWorkspace2;
var result = workspace.StartWorkspaceEx(
rdpFile.WorkspaceId+number,
"RDPStressSession",
rdpFile.FullAddress,
"User" + number + "@domain.com", // Username is updated each time
"SomePassword",
"1E715D4A1234A0DDAF06E946AFB66F7045A4D12345",
20,
4);
shell.RdpFileContents = rdpFileContents;
shell.PublicMode = false;
shell.Launch();
}
}
上記のコードを起動した結果、作成されたすべてのセッションは、最初に認証されたユーザー (この場合は User1@domain.com) の下に作成されます。
ワークスペースに資格情報を提供していますが、それを尊重していません。どんなアドバイスでも大歓迎です。
ありがとう。