1

我在使用 RemoteApp ActiveX 时遇到了一个奇怪的问题...

背景:我正在尝试在通过 RemoteApp 运行我们的 GUI 应用程序的特定场景中对我们的远程桌面会话主机进行负载测试。大多数情况下,这种情况下的最大用户密度是令人感兴趣的,正如我们在生产环境中看到的那样,当会话主机上的用户数达到约 450 时(CPU 和内存从最大值耗尽),用户开始收到 RemoteApp 连接错误。

因此,为了重现/调试问题,我想设置一个示例测试,该测试将:

  1. 当连接到服务器主机(RD 会话主机)以调用他们自己的 RemoteApp 实例/会话时,在客户端主机上有测试用户(User1..User2..User3...User1000)
  2. 连接负载将逐渐增加,因为我们将在客户端主机上每 X 秒再启动一个用户

我已经实现了一个简单的 C# 应用程序,它尝试在不同的用户帐户下调用多个 RemoteApp 会话。(我们为此预先生成了 1000 个用户帐户)

问题是:如果我一个接一个地创建会话,则运行 RemoteApp 的第一个会话在 User 1下正确验证,即使我提供不同的凭据(User 2、 User 3等),以下调用的会话也会运行,但是仍然在相同的用户1下进行身份验证(但我希望它是用户 2、用户 3 等等......)。所以我基本上在服务器端(RD 会话主机端)只看到用户 1 登录并在其下运行应用程序的多个副本。

所以某处缓存了用户名,但我不知道在哪里:(

后面的代码是:

主循环:

    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