【发布时间】:2013-12-03 15:39:41
【问题描述】:
我从客户端调用了 30 次 WebService 方法(asmx):
for (var i = 0; i < 30; i++) {
WSCustom.Test(i,
function (res) {
$("#Results").append(res + "<br />");
},
function (res) {
$("#Results").append(res.get_message() + "<br />");
}
);
}
这是 WebService 方法:
[WebMethod(EnableSession = true)]
public string Test(int i)
{
DateTime m_oStart = DateTime.Now;
WebClient m_oClient = new WebClient();
if (i % 2 == 0)
{
byte[] res = m_oClient.DownloadData("http://www.repubblica.it/");
}
return String.Format("TotalSeconds:{0}", new string[] { DateTime.Now.Subtract(m_oStart).TotalSeconds.ToString() });
}
我关注的是异步回复。
我的意思是,我应该立即收到 15 条回复(奇数 i 它会立即返回),而在此期间其他回复(需要时间下载页面服务器端)。
但实际上,输出是不同的:它立即处理第一个调用。然后,它等待第二个完成,然后我收到一些奇怪的i 回复,等等。
所以它根本不是异步的。
WebServices 如何在 .NET 中管理客户端调用?我可以异步执行整个过程吗?
编辑
使用EnableSession = false,结果如下:
TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:0
TotalSeconds:1,514
TotalSeconds:0
TotalSeconds:1,857
TotalSeconds:0
TotalSeconds:2,143
TotalSeconds:0
TotalSeconds:1,88
TotalSeconds:0
TotalSeconds:3,178
TotalSeconds:0
TotalSeconds:3,562
TotalSeconds:2,095
TotalSeconds:0
TotalSeconds:0
TotalSeconds:4,221
TotalSeconds:1,749
TotalSeconds:0
TotalSeconds:0
TotalSeconds:3,717
TotalSeconds:0
TotalSeconds:1,977
TotalSeconds:2,421
TotalSeconds:2,439
TotalSeconds:1,807
TotalSeconds:2,124
所以这不是会话错误。
【问题讨论】:
-
首先,不要使用
DateTime来衡量程序的运行时间;它没有足够的精度。使用StopWatch。
标签: c# .net web-services asynchronous