我目前正在开发一个 C# Windows 窗体应用程序,我打算让它与服务器交互。服务器将接收来 self 开发的移动应用程序的发布,每当收到发布时,我的 Windows 表单应用程序都应该收到通知并给我一个通知。为了做到这一点,我打算使用 WCF 双工服务。
例如我的移动应用程序将帖子发送到我的服务器。一旦我的服务器读取并接收到新的帖子,该服务应该向我的 winform 应用程序发送一条消息,以提醒我收到了帖子。 winform 应用程序的 UI 应该根据我想要更新的内容进行相应更新。 (例如添加新面板)
这基本上就是我希望它工作的方式 他们的工作方式是
- WCF 服务在我的服务器上运行
- Windows 窗体使用 Duplex Contract 连接到我的服务器的 WCF 服务
- 移动应用发布到网页
- 网页收到帖子后,asp.net 将调用 WCF 服务
- WCF 双工服务接收发布并将信息发送到 winform 应用
- 我的 winform 应用程序(又名 WCF 客户端)使用收到的这条新消息更新 UI
我的问题是,第 4 步如何进行到第 5 步?具体来说,服务收到帖子后如何将信息发送到winform应用程序。
更具体地说,一旦从网页接收到帖子,调用服务合约并由服务发送和接收信息,服务如何利用回调 channel 来发送信息到 winform 应用程序并相应地更新 UI?
最佳答案
这个问题的答案取决于您的 WCF 服务的托管方式以及该服务最终的“规模”(就并发客户端的数量而言)。
- 最简单的场景是自托管 WCF 服务(意味着托管在 Windows 服务中或作为桌面应用程序,而不是在 IIS 中)。在这种情况下,您可以使用 InstancePerSession 模式并使您的服务使用 session 。在这种情况下,客户端和服务类实例之间将具有 1:1 的对应关系。当客户端连接时,检索回调引用并将其存储在服务类外部的静态列表中。当您需要向一个或多个客户端发送消息时,只需迭代(或在列表中找到所需的客户端)并在回调合约上调用适当的函数
- 如果您需要在 IIS 中托管服务,那么情况会更加棘手,因为您可能有多个进程托管您的服务,因此您的列表可能会变得支离 splinter (或者在应用程序池回收时被清除) 。在这种情况下,您必须使用服务外部的东西(也许是 MSMQ)来通知其他应用程序池进程需要发送消息。
关于c# - WCF 服务如何与我的 winform 应用程序交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151415/