繁体   English   中英

通过WCF(C#)从ASP.NET反馈异步运行进程

[英]Running a process asynchronously with feedback from ASP.NET via WCF (C#)

(环境.NET 4.0 C#WCF和ASP.NET)

所以这是我想要发生的流程:

  1. 用户访问页面。
  2. 用户通过控件上传文件。
  3. 用户单击“提交”。
  4. Page告诉WCF服务开始“处理”此文件(发生很多幕后工作,如解压缩,哈希,移动和数据库工作)
  5. 随着文件的处理,用户会通过AJAX,更新面板和每隔N秒检查一次状态的计时器看到有关处理状态的反馈。

我在数据库中添加了一个名为“ UploadProcessing”的表,该表保留了上载的状态(除其他外),并且我编写了在后端处理上载的逻辑,该逻辑由WCF服务调用。 在处理上载时,它将上载具有工作当前状态的“ UploadProcessing”记录,直到最终完成。

我首先从仅调用WCFClient.ProcessUpload(args...); Commit_Click()事件中获取,但仅处理了上传并等待完成,然后再启用AJAX更新状态计时器,该计时器始终显示已完成(因为已完成)。 然后,我尝试异步调用相同的方法,但是它似乎以相同的方式起作用,因为在异步完成处理程序得到响应之前,页面不会完全发回到客户端(使用启用的计时器),从而有效地导致了相同的“已完成”对用户的回复。

因此,我有礼貌地向社区询问,您将如何通过WCF来“触发并忘记”此ProcessUpload()方法,以便它可以在后台执行其操作,同时页面可以自由地异步回发并监视其状态? 也许在WCF方面有某种ThreadPool解决方案? 还是从服务监视“ UploadProcessing”表中的未决上载,然后以这种方式处理?

预先感谢您的任何建议!

建议将WCF方法设为OneWay操作,例如

[OperationContract(IsOneWay = true)]
public void ProcessUpload(...)
{ 
    //etc
}

听起来您正在按照正确的方式进行操作,也许您对WCF服务的异步设置不是很正确吗? 这个问题的答案有一些有用的链接,这是MSDN页面上的异步调用WCF服务操作

更新 :看来此博客文章几乎完全涵盖了您的问题,对您来说似乎是一个很好的资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM