1

RemoteApp ActiveX を使用すると奇妙な問題が発生します...

背景: RemoteApp を介して GUI アプリケーションを実行する特定のシナリオで、リモート デスクトップ セッション ホストの負荷テストを実行しようとしています。ほとんどの場合、このシナリオの最大ユーザー密度は興味深いものです。これは、本番環境で、セッション ホストのユーザー数が ~450 に達すると (CPU とメモリが最大に達しない状態で)、ユーザーが RemoteApp 接続エラーを受け取り始めることを確認したためです。

したがって、問題を再現/デバッグするために、次のようなサンプル テストをセットアップします。

  1. クライアント ホストにテスト ユーザー (User1..User2..User3...User1000) を配置し、サーバー ホスト (RD セッション ホスト) に接続して独自の RemoteApp インスタンス/セッションを呼び出す
  2. クライアント ホストで 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) の下に作成されます。

ワークスペースに資格情報を提供していますが、それを尊重していません。どんなアドバイスでも大歓迎です。

ありがとう。

4

0 に答える 0