2015-02-10 60 views
1

我有以下场景:Asp.net C#异步调用Web服务方法

1)用户通过Asp.net网页上传文件。
2)网页将文件传递给FileFlowManagerBLL,该文件检查文件并将其上传到数据库
3)我想调用一个后台Web服务方法,这个方法在同一个项目中,这样Web服务从上传的文件开始执行大量的数字处理工作。在调用Web服务方法后,我想将控件返回给用户而无需等待它完成,并显示一条消息,指出文件已成功更新,并且一旦数据处理完成,用户将收到一封电子邮件。
4)Web服务完成数字处理可以说30-60分钟或更多,并调用相关代码发送电子邮件给用户。

我需要一些实现步骤3的指导,即如何异步调用Web服务方法,以便控件返回给用户,并且他/她可以在数字处理完成时查看Web应用程序的其他页面。

+0

这是一个相当流行的问题,但我努力寻找最近的重复。在相关领域的人是过时的。 – 2015-02-10 13:19:06

+0

是的,我试图找到它,但无法找到最新版本! – learner 2015-02-10 13:23:58

+1

这里是一篇有用的文章 - http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html – 2015-02-10 13:31:58

回答

1

一种方法是将WCF服务作为Windows服务托管。您的初始Web服务(在检查文件后)可以将其写入某个目录。然后在Windows服务中,您可以创建一个FileSystemWatcher来查找该目录中的新文件,并且如果它发现任何可以调用您的处理方法。

+0

c#ASMX web service已经存在,所以调用它的方法会更容易异步(不知何故)。我相信肯定有办法。 – learner 2015-02-10 13:26:29

+1

有很多关于如何从.net客户端页面异步调用方法的示例,然后等待结果。但是,您的示例稍有不同。您不想等待您的长时间运行过程完成,以便发送网页响应。您想要检查文件,启动长时间运行的进程,然后在长进程完成之前返回到客户端。我会高度推荐你有一个不同的自托管WCF Windows服务,运行这个漫长的过程,并让你的Web服务调用该服务。像这样的东西应该分发。 – 2015-02-10 14:07:54