Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF中长时间运行进程的进度通知-如何?_Wcf_Notifications_Progress Bar_Polling_Duplex - Fatal编程技术网

WCF中长时间运行进程的进度通知-如何?

WCF中长时间运行进程的进度通知-如何?,wcf,notifications,progress-bar,polling,duplex,Wcf,Notifications,Progress Bar,Polling,Duplex,我必须设计和实现一种方法来处理客户机/服务器应用程序中长时间运行的流程。典型的长时间运行过程可能需要2-3分钟。同时,我还需要向UI报告进度,并保持UI的响应性 考虑到这些,我想到了一些解决方案: 一个异步请求启动进程,该进程启动服务器端进程并返回分配的LRPID(长时间运行的进程ID),然后使用该LRPID从客户端定期轮询。(Pro:部署简单,无防火墙干扰Con:不合法,资源消耗等) 使用双工绑定(如NetTcpBinding)并在进展过程中从服务器发起回调(Pro:优雅、高效,Con:部署

我必须设计和实现一种方法来处理客户机/服务器应用程序中长时间运行的流程。典型的长时间运行过程可能需要2-3分钟。同时,我还需要向UI报告进度,并保持UI的响应性

考虑到这些,我想到了一些解决方案:

  • 一个异步请求启动进程,该进程启动服务器端进程并返回分配的LRPID(长时间运行的进程ID),然后使用该LRPID从客户端定期轮询。(Pro:部署简单,无防火墙干扰Con:不合法,资源消耗等)

  • 使用双工绑定(如NetTcpBinding)并在进展过程中从服务器发起回调(Pro:优雅、高效,Con:部署噩梦)

  • [你的建议???]


您对此有何看法?

以下是Dan Wahlin的一篇文章,介绍如何为Silverlight应用程序创建WCF进度指示器。这应该会有所帮助。

如果您不想担心客户端的防火墙等。。。我可能会使用您的第一个解决方案,并使用a来进行调用,以避免阻塞UI线程。我最近在一个应用程序中这样做了,其中生成报告的请求被放在一个队列中,并在完成后被检索。另一种方法(无需更改WCF绑定)是在WPF客户端中使用WebBrowser控件,并使用Signal将进度消息从服务器发送到该控件

请注意,为了避免WebBrowser控件出现javascript错误(因为默认情况下它似乎使用的是Internet Explorer版本7,它似乎与jQuery.js不兼容),您需要向客户端计算机上的注册表添加键,以更改客户端应用程序使用IE10或更高版本的默认值-请参阅)。 这可能会造成部署问题(因为似乎需要管理员权限(例如在64位Windows 8.1 pc上)才能添加注册表项)。 此外,似乎仍有必要在单独的线程中调用长时间运行的WCF方法,否则WebBrowser控件似乎不会更新其显示以显示它正在接收的信号器消息。(这是有意义的,因为UI线程必须等待WCF调用完成)


但是我提到它是一种使用更新工具(signal)的替代方法:)

客户端应用程序是用什么编写的?部署噩梦?为什么,因为IIS/WAS?那么就不要使用它们。@Daniel Auger:客户端应用程序是用WPF@AllonGuralnek:因为在防火墙中打开端口,在客户端上托管“迷你服务器”以备回调等。你必须使用任何WCF服务来实现这一点。看起来很酷,我需要进一步研究一下。谢谢好的,这证明是最好的中间路线!特别是因为,
“…它启动一个网络请求,然后请求被有效地“置于睡眠状态”,等待服务器响应(它不会立即返回)。然后服务器保持连接打开,但在它有东西要发送回来之前不活动(或者连接在90秒后超时,此时双工客户端将再次连接并等待)。这样可以避免重复点击服务器,但在有数据要发送时仍能立即得到响应。”
或者换句话说,是一个已经实现的、重量轻且有效的轮询系统,它模拟了真正的双向版本