我在win 7和server 2008上运行.NET 4代码(不是ASP),它们创建多个线程(每个都有一个webclient,因为我需要单独的cookiecontainers)来处理对网站的请求和响应。
我使用多个代理,对于每个代理,我将拥有许多不同的用户代理字符串,因此每个线程将基于代理+用户代理打开连接。即:10个代理的x 8 UA字符串= 80个线程上的80个连接。 [我相信Async会是一个更好的选择,虽然我确实需要单独的网络客户端]
为了不使请求压倒网站,我希望依赖.NET内部管道来防止同时向同一端点发出多个并行请求。即我在配置文件中添加了这个:
<connectionManagement>
<add address="*" maxconnection="1" />
</connectionManagement>
然而,我的日志显示它被忽略,并且同一端点的所有8个连接或多或少同时创建。这是因为每个连接是在一个单独的线程上进行的吗?如果是的话,除了让我的代码限制多个同时连接到同一个端点之外,每个进程的其他任何设置都可以工作吗?
修改
根据请求,启动每个请求的代码的概念:
Public Class cWebClient
Inherits WebClient
Public Property URL As String
......
Public Sub GetUrl()
.......
Dim html As String = Me.DownloadString(u)
.......
End Class
创建每个不同类的代码
Sub LaunchThreads()
Dim wc as new cWebClient
.....
Dim ts As New Threading.Thread(AddressOf wc.GetURL)