我正在寻找支持以下过程的方法:
我使用SignalR轻松完成了部分工作。我可以在Web服务器上调用一个方法,然后使用SignalR向该方法已完成的所有客户端发送通知。问题是只通知原始机器上的客户端。
我最初的计划是包含一些机器的唯一识别属性以及对服务器的调用,然后可以使用该属性将SignalR通知指向该机器,但这似乎不可能。
另一个想法是让服务器调用包含一个唯一引用,并使用该引用在本地更新文件(即Cookie),然后让客户端app轮询Cookie以获取新引用并过滤收到的所有SignalR消息对于那个独特的参考。这有点笨拙,即使它有效,但实际上并非如此,尤其是因为我希望这可以跨浏览器工作,不同的浏览器将cookie存储在不同的地方。
最终,这是为了支持从Web应用程序本地和静默打印。用户在Web应用程序中选择文档,点击打印按钮,将请求发送到服务器,该服务器从数据库检索文档,将其保存到网络共享并向机器上的客户端应用程序发送通知。打印请求已生成。然后,客户端应用程序从网络共享中打印文档并将其删除。
答案 0 :(得分:0)
我从来没有找到一种方法可以完全按照我在问题中所描述的那样做,但我想出了一个效果不错的替代方案。
在我的Web应用程序和Windows窗体客户端中,用户使用相同的Windows凭据登录。因此,我可以让服务器通过向同一用户登录的所有SignalR客户端广播SignalR消息来响应Web应用程序中的按钮单击,使用
Clients.User(userId).send(message)
有关更详细的示例和说明,请参阅this article。
在我的Windows窗体客户端中,我添加了代码,用于跟踪客户端连接到SignalR Hub的实例数量,并使用相同的用户凭据和代码处理在连接多个客户端实例时从服务器接收SignalR消息具有相同的用户详细信息(在我的情况下,这意味着显示一条消息,上面写着“您已经从Web应用程序请求打印,但您已在多个工作站登录。您是否希望在此处打印文档?”)