【问题标题】:Progress reporting from windows service hosted WCF to ASP.NET client (ajax maybe?)从 Windows 服务托管的 WCF 到 ASP.NET 客户端的进度报告(可能是 ajax?)
【发布时间】:2012-11-28 02:19:18
【问题描述】:

我们有一个 asp.net webform 应用程序 (3.5) 和一个通过 windows 服务托管的 wcf 服务(服务启动时激活的服务库)。两者都部署在同一台服务器上。

WCF 服务用于少数长时间运行的任务。

现在客户需要一些定制的报告,这将花费大量时间。

我的想法是在 UI 中显示任务的进度,但我正在努力寻找正确的方法。

是否可以通过以下方式,

  1. 根据 page 的请求,服务异步启动处理并将状态报告给某个变量。 (我不想写数据库)

  2. 来自客户端页面的异步轮询,它与 wcf 服务的另一个操作进行通信以检索变量值。

Ajax 客户端可以与 wcf 服务进行通信,但看起来该服务需要托管为 Web 应用程序(这里不太了解)

还有其他想法吗?使用 wcf 回调(双工通信)的任何选项?太糊涂了。

【问题讨论】:

标签: asp.net ajax wcf


【解决方案1】:

一年前我们取得了类似的成就。

1) 我们使用 Singleton InstanceMode 创建了一个 WCF 服务器,它处理请求并同时保持状态。另一种方法例如GetStatus 将状态返回给客户端。它还提供错误详细信息,以防出现任何错误。但是我们也保留了处理细节。

2) 在网页上,一旦请求被初始化并在网页上显示一个进度条,我们就会异步点击 getstatus。

这对我们很有效。

【讨论】:

  • 感谢您的建议和@Darren 的帮助。
【解决方案2】:

您可以考虑使用 SignalR 之类的东西将响应从您的 Web 应用程序推送到您的客户端(除其他好处外,这使用了 comet 技术,因此减少了您必须执行的轮询量)。

要从您的 WCF 服务获取对 Web 应用程序的响应,您可以使用 an async request to the service,或使用 Windows Azure Service Bus 等消息传递解决方案。

我们使用Client > JQuery > MVC > WCF > Service Bus > MVC > SignalR > Client 作为管道,它非常适合长时间运行的进程。

【讨论】:

  • 会调查的,但对我的需要来说似乎太复杂了。
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多