Windows 终端服务器上的用户会话之间是否共享服务组件,或者是否为每个用户会话启动一个进程?

Windows 终端服务器上的用户会话之间是否共享服务组件,或者是否为每个用户会话启动一个进程?,windows,.net-4.5,com+,terminal-services,Windows,.net 4.5,Com+,Terminal Services,我在COM+/Enterprise Services服务组件中有一些.NET代码。我通过WPF应用程序和遗留VBA应用程序与该组件通信 当只有一个用户登录到一台机器时,这种安排效果良好。当.NET或遗留应用程序实例化其一个COM对象时,组件在其自己的进程中启动 该系统还适用于第一个尝试在终端服务器安装上运行它的用户。但是,当其他用户登录时,他/她无法使用该应用程序。我曾希望每个会话都能独立运行,每个会话都能运行一个主机进程。我的期望错了吗 在激活选项卡上的组件服务中,我的应用程序配置为作为“服务

我在COM+/Enterprise Services服务组件中有一些.NET代码。我通过WPF应用程序和遗留VBA应用程序与该组件通信

当只有一个用户登录到一台机器时,这种安排效果良好。当.NET或遗留应用程序实例化其一个COM对象时,组件在其自己的进程中启动

该系统还适用于第一个尝试在终端服务器安装上运行它的用户。但是,当其他用户登录时,他/她无法使用该应用程序。我曾希望每个会话都能独立运行,每个会话都能运行一个主机进程。我的期望错了吗


在激活选项卡上的组件服务中,我的应用程序配置为作为“服务器应用程序”运行。在标识选项卡上,选择“交互式用户”。在“安全性”选项卡上,未选中“为此应用程序强制执行访问检查”。

很难找到任何权威性信息。对于标准COM,您可以。COM+没有相同的功能

根据,

COM+应用程序可以配置为在登录帐户下运行,或者 指定的帐户。在应用程序属性下,请参见标识选项卡。

但是,一旦设置,它将保留在该帐户下,直到应用程序关闭 关闭,因此您不能让多个用户在下使用同一COM+应用程序 不同的ID

这似乎也符合《圣经》中所说的


我的结论是,我可能应该接受我的组件必须在每台机器上运行一次,而不是在每个会话中运行一次。需要对其进行修改以适应这种情况。由于它需要在单个会话中启动新进程,因此它必须作为本地系统帐户下的Windows服务运行(适当注意安全问题)。

没有您描述的会话隔离,相反,进程所有权限制了您的访问权限。 您的结论似乎是正确的&您需要确定一种合适的机制来与服务交换数据

我使用WCF创建了一个名为pipelistener的网络服务

使用代理进行rpc调用的想法很有吸引力,但我发现将代理定义和存根链接在一起的方法使用起来相当笨拙

如果您有可能在任意一端触发的事件,那么保持客户端/服务同步就成了问题

AIUI不能调用最终在原始端调用rpc的rpc方法,尽管这可能是命名管道限制


如果我再次这样做,我会在服务中使用套接字服务器&websocket协议进行双向数据传输,即使您可能需要实现一些线程处理,以避免在服务请求时侦听器线程阻塞。

一些进一步的研究。。。根据“如果身份设置为交互用户,则如果服务器将其类工厂注册为多用途,则所有客户端都使用相同的服务器实例。”