【问题标题】:Multiple simultaneous .NET IPC servers / find the right one by process ID?多个同时的 .NET IPC 服务器/通过进程 ID 找到正确的服务器?
【发布时间】:2010-07-24 09:13:46
【问题描述】:

我有一个数据库客户端应用程序。有些人会运行它的多个实例(即进程)以同时连接到不同的数据库。我想让这个应用程序接受简单命令的自定义 URI 方案,例如“打开记录 123”。 URI 包含它所属的数据库,因此,取决于 URL 的内容,一个特定的进程“有资格”处理它。

因此,我决定为 URI 处理创建一个额外的应用程序,它 1) 不会持续运行,而是仅在单击某处的 URI 时通过 Windows 调用,以及 2) 找到正确的客户端并传递 URL上它。我在数据库客户端上使用了IpcServerChannel,在 URI 处理程序中使用了IpcClientChannel,以便 URI 处理程序可以询问客户端它负责哪个数据库。

但是,我该如何为多个客户处理这个问题? URI 处理程序如何“发现”哪些客户端(即 IPC 服务器)当前正在运行,以及如何通过 IPC 连接到它们?

【问题讨论】:

    标签: .net .net-2.0 ipc


    【解决方案1】:

    每个客户端应用程序在启动时注册的 Windows 服务将是处理这种情况的一种相当合理的方式,因为它还可以处理 URI 处理。

    您可能需要考虑以下几点:

    • 服务将如何处理登录到单个 PC 的多个用户
    • 服务将如何处理被强制终止或崩溃的客户端应用实例

    回复您关于不希望 URI 处理程序持续运行的评论:

    如果您有客户端应用程序/URI 处理程序(可能类似于 .msi 安装触发 Windows Installer 服务启动的方式),如果服务当前未运行,则启动该服务,并让该服务自行终止不再有任何正在运行的客户端,您将满足该要求。

    【讨论】:

    • 这是一种方式,但我不希望 URI 处理程序不断运行。 (我什至不确定 Windows 服务 能否 充当 URI 处理程序?)
    • @Sören,我已添加到答案中以尝试解决您的问题 =)
    • 听起来比我希望的要复杂一些,但我可能会接受 - 谢谢!
    • 只是为了跟进我确实采用了这种方法——每个工作站都会获得一个客户端注册的服务,并附带一个作为单独进程启动的 URL 处理程序。听起来开销很大,但工作得很好。再次感谢。
    • @Sören Kuklau,很高兴我的回答对您有所帮助:) 如果您编写的代码版本可以在任何地方发布而不会泄露任何公司机密信息,我很想看看您是如何实现这一点的=)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多