C# Microsoft RDS RemoteApp-在一个应用程序中调用不同帐户下的应用程序

C# Microsoft RDS RemoteApp-在一个应用程序中调用不同帐户下的应用程序,c#,activex,rdp,rds,remoteapp,C#,Activex,Rdp,Rds,Remoteapp,我在使用RemoteApp ActiveX时遇到了一个奇怪的问题 背景: 我试图在通过RemoteApp运行GUI应用程序的特定场景中,对远程桌面会话主机进行负载测试。大多数情况下,这种情况下的最大用户密度是令人感兴趣的,正如我们在生产环境中看到的那样,当会话主机上的用户数达到~450时,用户开始出现RemoteApp连接错误(CPU和内存faaar已达最大值) 因此,为了重现/调试问题,我想设置一个示例测试,该测试将: 在连接到服务器主机(RD会话主机)以调用其自己的RemoteApp实例/会

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

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

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

  • 在连接到服务器主机(RD会话主机)以调用其自己的RemoteApp实例/会话时,让客户端主机上的测试用户(User1..User2..User3..User1000)
  • 连接负载将逐渐增加,因为我们将在客户端主机上每X秒再启动一个用户
  • 我实现了一个简单的C#应用程序,它尝试在不同的用户帐户下调用多个RemoteApp会话。(我们为此预生成了1000个用户帐户)

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

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

    背后的代码是:

    主回路:

        for (int i = from; i < to; i++)
        {
            LaunchRDPSnapIn(i);
            Thread.Sleep(period);
        }
    
    作为启动上述代码的结果,所有创建的会话都是在第一个经过身份验证的用户下创建的(在本例中是User1@domain.com)

    这很有趣,虽然我确实向工作区提供了凭证,但这并不是荣誉。 欢迎任何建议


    谢谢。

    Hi Igor。我是RDS团队的成员。请您向Catalin.David和NirajA@microsoft发送电子邮件,告知这些信息(可能还有更多信息:操作系统版本、是否使用代理、有关设置的其他详细信息)。谢谢!当然,我会的。谢谢你David。如果我们能让RemoteApp压力测试正常工作,你可能会对我们的压力测试结果感兴趣。我对解决类似的问题感兴趣。这个线程上有人感兴趣并能分享解决方案吗?很遗憾,我找不到解决方案……嗨,Igor。我是RDS团队的成员。你能给Catalin.David和NirajA@microsoft写一封电子邮件,告诉他们这些信息吗(可能还有更多信息:操作系统版本、是否使用代理、有关设置的其他详细信息)。谢谢!当然,我会的。谢谢你David。如果我们能让RemoteApp压力测试正常工作,你可能会对我们的压力测试结果感兴趣。我对解决类似问题感兴趣。此线程上有人感兴趣并能分享解决方案吗?很遗憾,我找不到解决方案。。。
        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();
            }
        }