使用ASP.NET通过WCF(C#)提供的反馈异步运行进程

使用ASP.NET通过WCF(C#)提供的反馈异步运行进程,c#,asp.net,multithreading,wcf,asynchronous,C#,Asp.net,Multithreading,Wcf,Asynchronous,(Environment.NET 4.0 C#WCF和ASP.NET) 这就是我希望发生的流程: 用户访问页面 用户通过控件上载文件 用户单击“提交” Page告诉WCF服务开始“处理”此文件(在这里进行大量后台工作,如解压缩、哈希、移动和数据库工作) 当文件被处理时,用户通过AJAX、更新面板和每N秒检查一次状态的计时器看到关于处理状态的反馈 我在数据库中添加了一个名为“UploadProcessing”的表,该表保存了上传的状态(除其他外),并且我编写了在后端处理上传的逻辑,该逻辑由WCF服

(Environment.NET 4.0 C#WCF和ASP.NET)

这就是我希望发生的流程:

  • 用户访问页面
  • 用户通过控件上载文件
  • 用户单击“提交”
  • Page告诉WCF服务开始“处理”此文件(在这里进行大量后台工作,如解压缩、哈希、移动和数据库工作)
  • 当文件被处理时,用户通过AJAX、更新面板和每N秒检查一次状态的计时器看到关于处理状态的反馈
  • 我在数据库中添加了一个名为“UploadProcessing”的表,该表保存了上传的状态(除其他外),并且我编写了在后端处理上传的逻辑,该逻辑由WCF服务调用。当上传被处理时,它上传带有当前工作状态的“UploadProcessing”记录,直到最终完成

    我首先只调用
    WCFClient.ProcessUpload(args…)Commit\u Click()
    事件的code>,但它只是处理了上载,并在启用AJAX更新状态计时器之前等待它完成,该计时器始终显示它已经完成(因为它已经完成)。然后,我尝试异步调用相同的方法,但它似乎以相同的方式运行,因为在异步完成处理程序得到响应之前,页面不会完全发回客户机(使用启用的计时器),从而有效地向用户生成相同的“已完成”响应

    因此,我礼貌而恭敬地问社区,您如何通过WCF“启动并忘记”这个
    ProcessUpload()
    方法,这样它就可以在后台完成任务,而页面可以自由地异步回发并监视其状态?也许是WCF方面的某种线程池解决方案?或者可能是一个从服务,它监视“UploadProcessing”表中挂起的上载,然后以这种方式处理它们


    提前感谢您的建议

    听起来您的做法是正确的,也许您的WCF服务异步设置不太正确?的答案有一些有用的链接,下面是上的MSDN页面


    更新:它看起来几乎完全涵盖了您的问题,对您来说是一个很好的资源。

    建议将您的WCF方法设置为单向操作,例如

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