【发布时间】:2010-12-10 19:45:18
【问题描述】:
同时(即在多个线程中)向同一个 Web 服务操作发出多个请求时遇到问题。
每次调用 Web 服务时,我都会将其记录到控制台,所以我的输出类似于
Calling OperationA with paramA = 'A'
Calling OperationA with paramA = 'B'
Calling OperationA with paramA = 'C'
Calling OperationA with paramA = 'D'
...
Calling OperationA with paramA = 'Z'
这表明我正在使用不同的参数调用相同的操作。
我正在使用 Fiddler 来跟踪这些请求,并且我希望按照它们在应用程序上发出的顺序查看我的所有请求。但是全错了:请求都是乱序的,有的请求不止一次发出,有的根本没有发出(就是我的printf说我调用了,但是Fiddler什么也没显示)。
问题似乎是在短时间内发出大量请求,因为如果我在每次调用之间添加一个Thread.Sleep(2000),一切都会像魅力一样工作。
这是某种预期的行为吗?为什么请求没有正确排队?
顺便说一下,这是一个 C# 2.0 客户端,使用 wsdl.exe 生成的代理类调用 AXIS 2.0 安全 Web 服务,我使用的是异步“beginOperation”和代理类中的“endOperation”方法来发出请求。
编辑:这是我一遍又一遍地调用此操作的方式:
foreach(List listOfMyClass1 in listOfListOfMyClass1)
{
MyClass2[] webServiceParameter = listOfMyClass1.ToArray();
// Here I log that I'm calling the operation, and print every element in webServiceParameter
IAsyncResult ar = wsClient.BeginOperationA(webServiceParameter);
listOfAsyncResults.Add(ar);
// System.Threading.Thread.Sleep(2000); --> This solves the problem..
}
foreach(IAsyncResult ar in listOfAsyncResults)
{
WebServiceResultClass result = wsClient.EndOperationA(ar);
}
【问题讨论】:
-
嗯。您是否在任何给定时间只看到两个同时请求?会不会是每个远程服务器的 2 个连接的 http 限制搞砸了?
-
我不知道有这样的限制......这是怎么回事?但看起来有时有很多(超过 2 个)请求被处理(通过查看 Fiddler)。
标签: c# web-services .net-2.0