代码之家  ›  专栏  ›  技术社区  ›  mjn anonym

哪些进程间通信方法在终端服务器上工作?

  •  3
  • mjn anonym  · 技术社区  · 15 年前

    在终端服务器会话中,某些标准的IPC技术可能无法像在单用户环境中那样工作,因为 资源没有虚拟化 .

    例如,TCP/IP端口没有虚拟化,因此不同会话中试图侦听同一端口的应用程序将导致端口冲突。

    哪种IPC技术将在终端服务器环境中工作? 在同一用户会话中运行的应用程序 需要互动吗?

    • 消息(wm-copydata)?
    • 命名管道?
    • DDE?
    • 内存映射文件?
    2 回复  |  直到 15 年前
        1
  •  4
  •   Dan Ports    15 年前

    信息可以正常工作。 DDE 也会,因为它是基于消息的。 Named pipes 不会,因为它们是每个系统而不是每个会话。您也可以考虑使用COM或OLE。

        2
  •  2
  •   MrBry    15 年前

    所有的IPC都可以在TS环境中使用——您只需要巧妙地命名对象,就可以获得所需的最终结果。使用插座更难,但可以做到。我在下面列出了一些方法。

    对于可以命名的IPC对象(管道、事件、互斥、内存映射文件等),将会话ID合并到对象名称中将实现 虚拟化 必修的。 要进一步锁定IPC对象,请使用该对象的安全属性来阻止任何其他用户访问IPC对象。这可能是由于错误或终端服务器上的另一个用户恶意造成的。

    同样,在IPC对象的名称中使用登录用户的身份验证ID。在C++中参见MSDN GetTokenInformation 对tokenInformation类使用tokenStatistics。我相信有一个等价的.NET方法。再次保护IPC对象。

    如果您必须使用TS上的套接字(我个人会选择另一种方法在TS上的应用程序之间进行通信),那么请使用端口号。选择一个基本端口号并添加会话号以获取用于会话的端口。要确保正确的应用程序正在通信,请在传输数据之前使用身份验证方法和/或握手。理论上,会话的编号可以达到65535,因此当您使用例如2000的基本端口号并且在会话65500中运行您的应用程序时,您可能会松脱。 如果您真的想使用套接字,那么代理服务可能会有所帮助。