多个同步 .NET IPC 服务器/通过进程 ID 找到正确的服务器?
我有一个数据库客户端应用程序。有些人会运行它的多个实例(即进程)来同时连接到不同的数据库。我想让这个应用程序接受简单命令的自定义 URI 方案,例如“打开记录 123”。 URI 包含它所属的数据库,因此,根据 URL 的内容,一个特定进程“有资格”处理它。
因此,我决定创建一个用于 URI 处理的附加应用程序,该应用程序 1) 不会持续运行,但仅在单击某个 URI 时通过 Windows 调用,2) 找到正确的客户端并将 URL 传递给它。我在数据库客户端上使用了 IpcServerChannel
,并在 URI 处理程序中使用了 IpcClientChannel
,以便 URI 处理程序可以询问客户端它负责哪个数据库。
但是,我该如何为多个客户处理这个问题呢? URI 处理程序如何“发现”哪些客户端(即 IPC 服务器)当前正在运行,以及如何通过 IPC 连接到它们?
I have a database client application. Some people will run multiple instances (i.e. processes) of it to connect to different databases simultaneously. I'd like to have this app accept a custom URI scheme for simple commands such as 'open record 123'. The URI contains the database it pertains to, so, depend on the contents of the URL, one particular process is 'eligible' to handle it.
As such, I've decided to create an additional app for URI handling that 1) isn't constantly running, but only invoked through Windows when a URI is clicked somewhere, and 2) finds the right client and passes the URL on to it. I've used an IpcServerChannel
on the database client, and an IpcClientChannel
in the URI handler, so that the URI handler can ask the client which database it's responsible for.
How do I handle this for multiple clients, though? How can the URI handler 'discover' which clients (i.e. IPC servers) are currently running, and how to connect to them through IPC?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
每个客户端应用程序在启动时注册的 Windows 服务将是处理这种情况的相当合理的方式,因为它还可以处理 URI 处理。
不过,您可能需要考虑以下几件事:
回应您关于不希望URI 处理程序不断运行:
如果您有客户端应用程序/URI 处理程序(可能与 .msi 安装触发 Windows Installer 服务启动的方式类似)启动该服务(如果当前未运行),并让该服务自行终止当它不再有任何正在运行的客户端时,您将满足该要求。
A windows service that each client app registers with when it starts up would be a fairly reasonable way of handling this scenario as it could also take care of URI processing.
A couple of things you may want to think about though:
To respond to your comment about not wanting the URI handler constantly running:
If you have the client application / URI Handler (in a similar way to the way .msi installation triggers the Windows Installer service to start, perhaps) start the service if it's not currently running, and have the service terminate itself when it no longer has any running clients you'll achieve that requirement.