我目前正在开发一个C#Windows窗体应用程序,我打算让它与服务器进行交互。服务器将从我开发的移动应用程序接收发布,并且每当收到发布时,我的Windows窗体应用程序应该得到通知并给我通知。为此,我打算为它使用WCF双工服务。
E.g。我的移动应用程序将帖子发送到我的服务器。一旦我的服务器读取并接收新的帖子,该服务应该向我的winform应用程序发送一条消息,提醒我收到了一个帖子。 winform应用程序的UI应根据我想要更新的内容进行更新。 (例如添加新面板)
这基本上是我希望它的工作方式 他们这样做的方式是
我的问题是,第4步如何进入第5步?具体而言,服务如何在收到发布后将信息发送到winform应用程序。
更具体地说,一旦从网页收到发布,就会调用服务合同并且服务发送和接收信息,服务如何利用回叫信道发送信息到winform应用程序并相应地更新UI?
答案 0 :(得分:3)
这个问题的答案取决于您的WCF服务的托管方式以及服务最终的“大”(就同时客户的数量而言)。
InstancePerSession
模式并使您的服务使用会话。在这种情况下,您将在客户端和服务类实例之间建立1:1的对应关系。当客户端连接时,检索回调引用并将其存储在服务类之外的静态列表中。当您需要向一个或多个客户端发送消息时,只需迭代(或在列表中找到所需的客户端)并在回调合同上调用相应的函数答案 1 :(得分:1)
就双工连接而言,您实际上只能通过一个连接进行双向通信,而不是与服务的所有连接进行通信,而无需执行一些棘手的线程并关闭任何可伸缩性(或使用外部的东西)处理pub / sub的服务。
虽然一个解决方案可能比你想要做的更多,但SignalR。它允许单个客户端发出请求,然后您可以将该请求中的数据广播到其他客户端(或以其为目标)。看一下它的信息,它的唯一目的是在.NET中与多个客户进行实时通信。
另外另一个注意事项是,您需要在WinForms中使用某种BackgroundWorker
或其他内容作为您的侦听线程,以便在后台操作运行时不会锁定UI。