我有一个Excel服务,它可以做一些繁重的工作,比如一些文件操作,或者从一堆水晶报表中生成ASP.NET工作表。我不想因为调用这个web服务而被阻塞,所以我想让web服务调用异步。另外,我想从网页调用此web服务,并想要一些机制,使我可以不断轮询服务器,以便我可以在屏幕上显示一些进度指示器,例如,已经处理的文件数。请注意,我不想要web方法调用完成时的通知,而是想要实时进度状态。我该怎么做呢?
发布于 2008-09-25 19:36:15
在服务器上编写一个单独的方法,您可以通过传递已调度的作业的ID来查询该方法,该方法返回一个介于0-100 (或0.0和1.0,或其他值)之间的近似值。
例如,在REST样式中,您可以向http://yourserver.com/app/jobstatus/4133/发出GET请求,该请求将返回一个简单的'52‘作为text/plain。然后你只需要每(秒)查询一次两秒钟?10秒?)看看它能走多远。
如何在后端实际完成监控在很大程度上取决于您的进程是什么以及它是如何工作的。
发布于 2008-09-25 19:47:23
我认为XML服务很慢,所以创建多个方法和轮询的过程将是极其缓慢的,并且会在服务器上产生巨大的负载。我不会在生产环境中这样做。我在数据库轮询中也看到了同样(但更小)的问题。
请尝试使用SOAP extensions。它实现了一个事件驱动的模型。参见Adding a Progress Bar to Your Web Service Client Application on MSDN。
发布于 2008-09-25 19:52:29
您还可以使用use SoapExtensions通知您的客户端下载/处理进度。然后,服务器可以向客户端发送事件。如果您不使用客户端,则不需要更改客户端中的任何内容。
在你的客户端中允许类似这样的东西:
//...
private localhost.MyWebServiceService _myWebService = new localhost.MyWebServiceService ();
_myWebService.processDelegate += ProgressUpdate;
_myWebService.CallHeavyMethod();
//...
private void ProgressUpdate(object sender, ProgressEventArgs e)
{
double progress = ((double)e.ProcessedSize / (double)e.TotalSize) * 100.00;
//Show Progress...
}https://stackoverflow.com/questions/135478
复制相似问题