为什么我client用多线程调用server的WebMethod,返回很慢?我用C#写了一个client程序,这个程序调用一个简单本地方法MethodA(). 我同时启用100个线程,共累计对MethodA()执行10000次调用。执行的结果非常快,一会儿10000次调用就正常完成了。于是,我把方法MethodA()做成webservice的webmethod,也叫MethodA(),把它发布在IIS里,然后client程序同样启用100个线程,共累计对webmethod MethodA()执行10000次调用。执行的结果非常就非常慢。根据我自己写的log,发现一下现象:1. 最开始几个调用,速度尚可,但是越到后面越慢
2. webservice的webmethod执行时间正常,我分别在MethodA()的第一行和最后一行记录了时间戳在log文件中,
执行时间无延时。
3.我又在client调用MethodA()的那一行的前后记录了时间戳在log文件中,发现执行时间有相当的延迟。6/7/2010 12:34:43 AM:Client MethodA()(CHN-ENTFX-001 entering...)
6/7/2010 12:36:37 AM:Server MethodA()(CHN-ENTFX-001 entering...)
6/7/2010 12:36:37 AM:Server MethodA()(CHN-ENTFX-001 Exit...)
6/7/2010 12:36:37 AM:Client MethodA()(CHN-ENTFX-001 Exit...)4. 我发现延迟发生在request进入web method的那一刻。5. client 和server的网络没有任何问题。我估计是IIs/ASP.net 2.0/web service/webMethod的最大允许线程的限制造成的。搜了一下interent, 修改了一下地方,但问题依然没有解决。在machin.config中修改maxWorkerThreads和maxIoThreads的值。Start the registry editor (regedit.exe) 
Move to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters 
From the Edit menu select New - DWORD value 
Enter a name of MaxPoolThreads and press Enter 
Double click the new value and set to between 5 and 20. Never more or less. Click OK 
Stop and start the IIS service  现请教高手,有何办法可以解决这个问题?我应该修改些什么?
谢谢!环境:
client:windows 2003 + .net 2.0 + c# + console application
server: windows 2003 + IIS + asp.net 2.0 + c# + web service

解决方案 »

  1.   

    我研究了一下,感觉是问题出在client段,貌似同一个client和server的connection连接,对web service 的并发请求是有限制的,好象是在任一时刻,client超过10个以上的未返回(完成)请求,如果此时client继续发请求,这些请求都回被等待,直到有一个前期的请求完成返回,它才会再补一个请求到server端。随便提一下,client端的多线程我用的是System.Threadings.ThreadPool技术。如何解决这个问题呢?
      

  2.   

    具体不清楚,
    也许有以下的因素:
    1.你在本地机上测试,网络瓶颈就不存在了.
    当你在远程环境下测试,别的不说,同一个网络通道(你的电脑与服务器端),要在短时间内上行/下行 几万次的传输,这对你的网卡的CPU以及网络通道都是不小的压力.2.webservice一般是基于soap+http,需要进行SOAP/xml封装.这也会降低一定的效率.
    不如服务器端改成.ashx来处理.