我有一个用ASP.NET MVC3编写的web项目。我的web应用程序的一部分被用来保存一些图像,它运行起来相当慢。因此,在尝试保存100张图片(其他一些工作也已完成)之后,速度会很慢,用户必须在浏览器中等待很长时间。
我正在考虑设计一个后台服务(进程),我会向它发送一些数据,它将在后台运行,而不会减慢网站的使用。具体地说,我需要一个使用单个字符串队列的服务。Web应用程序可以随时在队列中发送新字符串,并且服务必须对队列中的字符串进行一些处理。
我不知道从哪里开始,或者使用什么。有什么建议吗?:)
发布于 2011-10-18 10:12:15
看起来你知道你想要的基本流程,从应用程序获取请求,将数据传递给wcf服务,返回适当的视图。wcf在后台工作。如果您想要通知发出请求的用户后台处理已完成,则需要更多技巧,但您始终可以让wcf服务将mvc应用程序检查的消息写入公共消息表。
发布于 2011-10-18 10:20:37
可以有许多不同的方法来设计这样的东西。
一种方法是在Windows服务中托管WCF服务,该服务管理后台作业,并具有具有以下方法的服务接口:
Guid StartJob(...) //returns new jobId<br/>
SomeInfoObject CheckJobStatus(Guid jobId)这将允许您的web应用程序轮询..使用Ajax,如果你愿意的话,你可以向用户显示一个进度条(客户端会向你的web应用发出Ajax请求,然后调用服务来获取进度信息)。
另一种方法是将任务信息写入数据库以调度新作业。可以使用windows服务(甚至是启动进程的计划任务)来完成作业,并在作业完成时更新数据库。
发布于 2011-10-18 10:36:23
任何形式的队列都可以在这里工作。查看RabbitMQ或MSMQ。基本上,你想要的就是在某个地方存储一条你想要处理的消息。
您可以使用BackgroundWorker或其他东西-将其设为静态,然后在global.asax中的Application_Start上创建它。我认为你最好有某种形式的机制,这种机制不会在网站重启或任何事情上被拆除。
另一种选择是将值放入数据库中,这样你就可以很容易地跟踪它的状态和反馈。
https://stackoverflow.com/questions/7787297
复制相似问题