C# 下载字符串超时

C# 下载字符串超时,c#,asp.net,C#,Asp.net,我有一个返回网页内容的方法: private string FetchHTML(string sUrl, Encoding encoding) { System.Net.WebClient oClient = new System.Net.WebClient(); oClient.Encoding = encoding; return System.Web.HttpUtility.HtmlDe

我有一个返回网页内容的方法:

        private string FetchHTML(string sUrl, Encoding encoding)
        {
            System.Net.WebClient oClient = new System.Net.WebClient();
            oClient.Encoding = encoding;
            return System.Web.HttpUtility.HtmlDecode(oClient.DownloadString(sUrl));
        }
但当我尝试从livejournal加载链接(例如)时,我在DownloadString中遇到了以下异常:

请求已中止:操作已超时


这是一个已知的问题吗?为什么下载字符串对某些网页不起作用?有解决方案吗?或者有其他方法可以替代DownloadString吗?

嗯,例外情况是操作超时。这似乎是一个相当合理的事情发生在某些时候-可能会有缓慢的服务器,缓慢的互联网连接等-如果你试图从同一台主机下载多个页面,这将使用连接池,这可能会导致这种情况发生,甚至当每个单独的请求看起来不错


使用类似的方法来了解网络级别的情况。

有些网站非常聪明,可以检查请求是否由浏览器发出。当他们检测到请求不是通过浏览器完成时,他们不会响应。但是,通过简单地将用户代理信息与请求一起发送,很容易愚弄他们。因此,解决方案是向FetchHTML方法添加一行代码:

    private string FetchHTML(string sUrl, Encoding encoding)
    {
        System.Net.WebClient oClient = new System.Net.WebClient();
        oClient.Encoding = encoding;
        // set the user agent to IE6
        oClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
        return System.Web.HttpUtility.HtmlDecode(oClient.DownloadString(sUrl));
    }

PS:为了检测问题,我使用了Wireshark而不是Wireshark,我发现它太复杂了。

你能给出一个URL在你发布的链接之外超时的例子吗?也许是比livejournal名声不好的东西?它还可以帮助您查看用于调用
FetchHTML
的特定代码(可以使用它们所代表的值替换任何变量)。