Cha*_*ran 6 .net c# networking web-crawler windows-server-2008
我有一个应用程序,蜘蛛网站的信息.似乎在创建HttpWebRequests 20-45分钟之后,他们中的一大堆返回超时.我们做的一件事就是附加一个BindIPDelegate匿名函数来为请求提供一个特定的IP,因为我们通过大约150个IP循环.
我正在HttpWebRequest使用以下设置设置对象..
该应用程序使用.NET 4.0并在Windows Server 2008 R2上运行.
这肯定看起来像应用程序/ TCP/.NET相关,因为如果我重新启动应用程序它再次运行正常.此外,它似乎或多或少像超时排队等待本地端口等等.
有任何想法吗?
您没有多说实际用于执行请求的代码,但无论如何,这是我的猜测:
您正在使用BeginGetResponse()/EndGetResponse()回调并且回调需要很长时间才能完成(或阻止!).如果您在短时间内发出大量请求,这可能会导致线程池中出现死锁.
由于您没有重复使用连接,并且,如果请求发生得非常快且不间断,您可能会用完套接字(上次我尝试过,在Windows上每个接口大约3k).如果将KeepAlive设置为true可以解决您的问题,那么就是这样.
您没有调用Dispose()/Close()HttpWebRequest或HttpWebResponse或您从响应中获得的Stream.在您的应用程序配置设置(system.net/connectionManagement/add[address="*",maxconnection=)中达到2的限制(来自MSDN文档)或6(配置文件默认值)之前,这可能会有所帮助. "6"]).测试这是否是问题的一种简单方法是将限制设置为1并查看问题是否比以前更早发生.
顺便说一句,将KeepAlive设置为false并将Pipelined设置为true没有意义.