同事在做多线程访问webservice的时候,发现总是很慢,平均速度比单线程访问要慢得多,后来,用了多进程去访问,结果就好多了
后来上网查了一下,有个HTTP双连接限制的情况,原文如下
HTTP 双连接限制
HTTP 规范表明,一个 HTTP 客户端与任一服务器最多可以同时建立两个 TCP 连接。这可以防止单个浏览器在浏览某个页面(例如,具有 120 个嵌入的缩略图)时,由于连接请求过多而使服务器负载过重。此时,浏览器将仅创建 2 个连接,然后通过这两个管道开始发送 120 个 HTTP 请求,而不是创建 120 个 TCP 连接并通过每个连接来发送 HTTP 请求。对于中间层,此方法的问题在于,中间层可能会有 50 个同时请求连接的用户。如果不得不为每个用户进行一次 MapPoint .NET Web 服务调用,将会有 48 个用户等待两个管道中的一个空闲下来。
maxconnections
连接到 Web 资源的默认双连接限制可以通过一个名为 connectionManagement 的配置元素来控制。connectionManagement 设置允许您添加要让其采用非默认连接限制的站点的名称。可以将以下内容添加到典型的 Web.config 文件中,将您连接的所有服务器的连接限制默认值增加到 40。
<configuration>
<system.net>
<connectionManagement>
<add address= "* " maxconnection= "40 " />
</connectionManagement>
</system.net>
<system.web>
...
应当注意的是,对本地计算机的连接数量从来都没有限制,因此,如果是连接到本地主机,则此设置无效。
我想如果一个进程为一个HTTP客户端的话,那么你在这个进程里面开多个线程进行webservice访问时,也是同时并发2个
然后做了测试,多线程返回结果果然是2个2个往外蹦
然后就加了
<system.net>
<connectionManagement>
<add address= "* " maxconnection= "40 " />
</connectionManagement>
</system.net>
就好了
这里说一些细节,原来配制文件也有顺序,我把上面的配制放在配制文件的顶部就会报错
adress 的格式 是 http://192.168.0.2/
后面加个/都会报错
另外,做测试的机子是XP,IIS的最大连接数为10个,所以只能开10个线程