并行使用Javascript中的多个.NET Web服务
Consuming Multiple .NET Web Services from Javascript in Parallel
我有两个使用javascript的ASMX web服务。第一个服务执行一个长操作,并根据其进度更新数据库表。第二个服务轮询相同的数据库表,以便通过进度条向最终用户报告进度。
我的问题是,漫长的过程似乎阻碍了投票服务。当我记录javascript的活动时,它似乎正确地请求了长服务,然后开始每秒异步请求一次轮询服务(注意:长进程也是异步的)。这两种请求类型都使用setInterval
或setTimeout
,这两种类型不应停止浏览器。然而,当我查看javascript的活动时,在漫长的过程完成之前,轮询请求的响应都不会返回。因此,这个漫长的过程似乎是在阻止轮询请求,直到它完成为止。
以下是真相:
JavaScript:
var percentComplete = 0;
setTimeout(function ()
{
MyWebService.CreateBulkOrder(serverVariable, function (result, eventArgs)
{
percentComplete = 100;
completeOperation(result);
});
}, 0);
var intID = setInterval(function ()
{
if (percentComplete < 100)
{
MyWebService.GetStatus(serverVariable, callback);
}
else
{
clearInterval(intID);
}
}, 1000);
服务代码(VB.NET-注意:代码已更改为通用代码)
<System.Web.Script.Services.ScriptService()>
<System.Web.Services.WebService(Namespace:="http://mydns.com/webservices")>
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)>
<ToolboxItem(False)>
Public Class MyWebServices
Inherits System.Web.Services.WebService
<WebMethod(EnableSession:=True)>
Public Function GetStatus(serverVariable As Integer) As Object
Dim currentPage As Integer = 0
Dim totalPages As Integer = Math.Ceiling(CType(If(Session("Number of Records"), Double) / CType(ConstantsCommon.TOTAL_PER_PAGE, Double))
Using clientDB As ClientDataContext = FunctionsOrderMgmt.ClientConnectionReadOnly
Dim repeatPageQuery = From repeatPage In clientDB.RepeatPages
Where repeatPage.KEY = serverVariable
Select repeatPage
Dim repeatPageData = repeatPageQuery.SingleOrDefault()
If repeatPageData Is Nothing Then
currentPage = 0
Else
currentPage = If(repeatPageData.REPEAT_PAGE, 0)
End If
Return New With {.TotalPages = totalPages, .CurrentPage = currentPage}
End Using
End Function
<WebMethod(EnableSession:=True)>
Public Function CreateBulkOrder(serverVariable As Integer) As Boolean
If Not TestsPass Then
Return False
End If
Try
'Do stuff that takes a long time
Catch ex As Exception
Return False
End Try
Return True
End Function
End Class
将"OneWay=true"添加到CreateBulkOrder Webmethod,否则它将等待响应。
http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapdocumentmethodattribute.oneway(v=vs.71).aspx
相关文章:
- 同一文本框中的验证程序CPF e CNPJ(ASP.NET web应用程序)
- 如何使用默认的网络摄像头拍摄照片并将其保存在我的c#.net web应用程序中
- WebMethod在ASP.Net Web角色(Web窗体)中不起作用
- 如何使用phonegap在android中调用asp.net Web服务
- asp.net web表单客户端验证始终回发
- Testing .NET Web API from JavaScript
- 是否可以将 ASP.NET Web 应用程序上载到 VMware 上的虚拟 2008 服务器上
- 用于.NET Web开发的MetaWidget
- ASP中的动态图像.NET Web应用程序
- 是否可以在没有视图状态和回发的情况下使用asp.net web表单
- 如何通过AngularJS$http从ASP.Net Web API 2获取访问令牌
- ASP.net web服务使用javascript发送命令
- 在ASP.Net web窗体/MVC中动态加载和添加字段
- 在ASP.NET Web API 2项目中设置Angular路由
- 如何将字符串数组从javascript传递到asp.net Web服务
- ASP.NET Web API 控制器更新行
- ASP.NET Web API 2 - 如何开机自检
- 如何将服务器端类型传递给 asp.net Web 表单以供 JavaScript 使用
- 如何在 ASP.NET Web 表单中填补服务器端和客户端之间的空白
- asp.net Web API 405 方法不允许、发布、自定义操作