【问题标题】:WCF service singleton with callback and hosted on IIS?带有回调并托管在 IIS 上的 WCF 服务单例?
【发布时间】:2011-07-22 20:35:26
【问题描述】:

我有一个托管在 IIS7 Web 应用程序上的 WCF 服务。它由 WebServiceHostFactory 创建。客户端连接到服务调用 Collect 方法,并将数据存储到 DB。一切正常。

现在我想在每次“收集”新数据时刷新页面(即调用服务方法 Collect)。

我的问题是:最好的方法是什么?

我正在考虑 CallbackContract,但这需要一个单例模式(服务现在是 PerCall),或者这是一个错误的假设?这种方法可能吗?

我的逻辑是:

  1. ASP.NET 页面订阅 WCF 服务
  2. 从现在开始创建服务单例
  3. 当方法被调用时,服务调用订阅者(客户端)
  4. 因此应该只有一个服务实例才能订阅工作(或者是吗?)
  5. 客户端页面会自行刷新

问候, 凯特

【问题讨论】:

  • 您打算如何在浏览器中触发 ASP.NET 页面的页面重新加载?除非您使用一些高级推送产品,否则您将不得不轮询 ASP.NET 页面,该页面又可以轮询您的 WCF 服务。
  • 是的,我正专注于解决我错过了明显的回调问题。这是关于没有用户交互的页面更新。所以它是计时器。

标签: asp.net wcf iis callback singleton


【解决方案1】:

您无法从服务器刷新用户浏览器中的页面。浏览器使用 HTTP,这是一种请求-响应协议,因此如果浏览器没有发出请求,它就不会从您的服务器寻找响应。

如果您在浏览器中托管了 Silverlight 应用程序,那就另当别论了,但您并没有在任何地方提到 Silverlight。您还可以使用 HTML5 中的 WebSockets 来完成您的要求,但这还没有完全标准化。

【讨论】:

  • 感谢您的快速回复。那么您认为,如果没有 Silverlight,这种情况是不可能的吗?是否有某种替代方案,或者我只剩下“计时器”解决方案(每 x 秒/分钟),然后?
  • 使用 JavaScript 轮询是最常见的方法。您向 Web 服务提交 AJAX 请求,并使用 jQuery 等 javascript 库来更新用户浏览器中的页面,而无需刷新整个页面。
  • 是的,这是我的默认选项。我想要更复杂(高效)的东西,但我想这是必须的。现在我很高兴我在探索(甚至实施!:O)这些其他选项之前问过。我完全忘记了服务器不能使用重定向 :) 我只使用回调,我已经有回调工作的基础设施,所以它很容易。感谢您使我免于痛苦的失望,以及我所做的一些毫无意义的工作。
猜你喜欢
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多