c# - WCF 服务如何与我的 winform 应用程序交互?

标签 c# asp.net winforms wcf

我目前正在开发一个 C# Windows 窗体应用程序,我打算让它与服务器交互。服务器将接收来 self 开发的移动应用程序的发布,每当收到发布时,我的 Windows 表单应用程序都应该收到通知并给我一个通知。为了做到这一点,我打算使用 WCF 双工服务。

例如我的移动应用程序将帖子发送到我的服务器。一旦我的服务器读取并接收到新的帖子,该服务应该向我的 winform 应用程序发送一条消息,以提醒我收到了帖子。 winform 应用程序的 UI 应该根据我想要更新的内容进行相应更新。 (例如添加新面板)

这基本上就是我希望它工作的方式 他们的工作方式是

  1. WCF 服务在我的服务器上运行
  2. Windows 窗体使用 Duplex Contract 连接到我的服务器的 WCF 服务
  3. 移动应用发布到网页
  4. 网页收到帖子后,asp.net 将调用 WCF 服务
  5. WCF 双工服务接收发布并将信息发送到 winform 应用
  6. 我的 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/

相关文章:

c# - ASP C# 接口(interface)

c# - 在字符串连接中忽略 Char 对象

c# - 如何使用 vs 2010、c# 以编程方式在 Word 2007 文档中插入或编辑饼图?

c# - 当类实现 Equals 和 GetHashCode 时,如何使用对象引用作为 C# 字典中的键?

android - 尝试从 Android 模拟器访问本地托管的 ASP.net 服务 - 未在 127.0.0.1 上公开?

html - TR Css 类与之前的 TR 相同

c# - 将列表与列表框同步?

c# - 显示表格的所有边框线

c# - 如何以无边框形式设置客户区(ClientRectangle)?

c# - 控制 Windows 窗体中多个线程之间的同步