使用RemoteApp ActiveX时遇到一个奇怪的问题......
背景: 在通过RemoteApp运行我们的GUI应用程序的特定场景中,我试图加载测试我们的远程桌面会话主机。大多数情况下,这种情况下的最大用户密度是我们感兴趣的,因为我们在生产环境中看到,当用户对会话主机的计数达到~450时(CPU和内存从最大输出中消失),用户开始获取RemoteApp连接错误。
因此,为了重现/调试问题,我想设置一个样本测试:
我实现了一个简单的C#应用程序,它试图在不同的用户帐户下调用多个RemoteApp会话。 (我们已为此预先生成了1000个用户帐户)
问题是:如果我一个接一个地创建会话,则在用户 1 下正确验证运行RemoteApp的第一个会话,即使我提供了不同的凭据,也会调用以下会话(用户 2 ,用户 3 等等)正在运行,但仍在同一用户 1 下进行身份验证(但我希望它是User2,User3等等)上...)。所以我基本上在服务器端(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)下创建的。
虽然我确实为工作区提供了凭据,但它并不尊重它,这很有趣。 任何建议欢迎。
感谢。