最近写个spider,一开始使用webclient来取html页,发现即使开再多的线程也只有两个并发连接,找了好长时间资料也没找到相关的资料(没想到仔细找找msdn,丢人哪)。没奈何,只好自己来实现一个http,大部分时间花在调试http通信上,耗了差不多一个星期,效果也就是仅仅能用而已。
结果有一天灵光一闪,用“webclient 并发”(竟然一直没想到,猪啊)google了一下,找到一位高人的文章,一下子解决了大问题。
两个办法:
1。限制针对应用程序域,为每个线程使用不同的应用程序域:
AppDomain appDomain = AppDomain.CreateDomain("");
appDomain.ExecuteAssembly(@"TestClient.exe");
AppDomain.Unload(appDomain);
2。配置文件:
<system.net>
<connectionManagement>
<add address="*" maxconnection="100"/>
</connectionManagement>
</system.net>
当时气不打一处来,这么简单的东西,ms怎么不给列出来呢?!搜一下msdn,不好意思,里面明明就有,错怪了ms了。
接下来的问题是,通常情况下url里传递汉字都是会用urlencode一下变成utf-8字符串来传,可就有个别网站直接把汉字写上去。webclient呢,又自作聪明的把querystring都utf-8一下再发出去,于是就...404。还没找到办法解决,实在不行就用自己写那一段http通信代码来取了。
keep thinking, searching, googling....