gpt4 book ai didi

javascript - 从 Javascript 并行使用多个 .NET Web 服务

转载 作者:行者123 更新时间:2023-11-28 10:16:26 26 4
gpt4 key购买 nike

我有两个通过 javascript 使用的 ASMX Web 服务。第一个服务执行长时间操作并根据其进度更新数据库表。第二个服务轮询同一数据库表,以便通过进度条向最终用户报告进度。

我的问题是,长进程似乎阻塞了轮询服务。当我记录javascript的事件时,它似乎正确地请求了长服务,然后开始每秒异步请求一次轮询服务(注意:长过程也是异步的)。两种请求类型都使用 setIntervalsetTimeout,它们不应停止浏览器。然而,当我查看 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 Web 方法,否则它将等待响应。

http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapdocumentmethodattribute.oneway(v=vs.71).aspx

关于javascript - 从 Javascript 并行使用多个 .NET Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com