首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何衡量web服务调用的进度?

如何衡量web服务调用的进度?
EN

Stack Overflow用户
提问于 2008-09-25 19:32:38
回答 6查看 9.4K关注 0票数 6

我有一个Excel服务,它可以做一些繁重的工作,比如一些文件操作,或者从一堆水晶报表中生成ASP.NET工作表。我不想因为调用这个web服务而被阻塞,所以我想让web服务调用异步。另外,我想从网页调用此web服务,并想要一些机制,使我可以不断轮询服务器,以便我可以在屏幕上显示一些进度指示器,例如,已经处理的文件数。请注意,我不想要web方法调用完成时的通知,而是想要实时进度状态。我该怎么做呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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秒?)看看它能走多远。

如何在后端实际完成监控在很大程度上取决于您的进程是什么以及它是如何工作的。

票数 4
EN

Stack Overflow用户

发布于 2008-09-25 19:47:23

我认为XML服务很慢,所以创建多个方法和轮询的过程将是极其缓慢的,并且会在服务器上产生巨大的负载。我不会在生产环境中这样做。我在数据库轮询中也看到了同样(但更小)的问题。

请尝试使用SOAP extensions。它实现了一个事件驱动的模型。参见Adding a Progress Bar to Your Web Service Client Application on MSDN

票数 2
EN

Stack Overflow用户

发布于 2008-09-25 19:52:29

您还可以使用use SoapExtensions通知您的客户端下载/处理进度。然后,服务器可以向客户端发送事件。如果您不使用客户端,则不需要更改客户端中的任何内容。

在你的客户端中允许类似这样的东西:

代码语言:javascript
运行
复制
//...
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...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/135478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档