一、测试环境

机器A:Windows7 简体中文旗舰版,已安装.net framework2.0和4.0

机器B:Windowsxp 英文专业版,已安装.net framework2.0和4.0

机器C:Windowsxp 简体中文专业版,只安装了.net framework2.0

程序是基于.net framework2.0写的

 

二、测试代码

 

            string result;
            try
            {
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                CookieContainer cookieContainer = new CookieContainer();
                httpWebRequest.CookieContainer = cookieContainer;
                httpWebRequest.Timeout = 5000;
                Stream responseStream = httpWebRequest.GetResponse().GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding(encode));
                result = streamReader.ReadToEnd();
            }
            catch (Exception ex)
            {
                result = ex.ToString();
            }
            return result;

 

三、问题

很简单的一段代码,很久以前写的了,这天又拿出来用,却发现不能用了,总是抛异常(请求超时),试了好多不同的url都是一样,还以为是没写UserAgent或者UserAgent写的有问题,抓了个浏览器的包,把浏览器的UserAgent拷出来再试,也不行。把以前可以用的程序直接拿出来跑,也是一样。左思右想,代码一直没人动,变了的是操作系统由以前的window xp变成了现在的windows 7(机器A),立即拿到windows xp虚拟机(机器C)里去跑跑试试,直接从Debug里把文件拷过去,一跑可以用。由于windows xp虚拟机(机器C)只装了.net framework2.0,是不是.net framework4.0影响的呢?第二天直接拿到公司电脑(机器B)也可以用。

不能这么杯具吧?难道windows7就不行了吗?Microsoft不想让大家用HttpWebRequest了?

 

四、解决

经过几天在网上搜索,终于找到了一个和我差不多的问题,并给出了解决方法,不过他说是.net framework4.0,而我的是在windows7上就出问题。

最终根据给出的解决方法分析,可能是和系统不同的“默认代理和用户验证策略”有关。大家有知道准确原因的请指教。

解决方法如下:在app.config里加入以下代码,原来的代码C#代码无需修改

 

 <system.net>   
    <defaultProxy   
        
enabled=”false”   
        useDefaultCredentials
=”false” >   
      <proxy/>   
      <bypasslist/>   
      <module/>   
    </defaultProxy>   
  </system.net> 

 

五、参考

http://msdn2.microsoft.com/en-us/library/kd3cf2ex(VS.80).aspx

 

版权声明:本文为llcto原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/llcto/archive/2011/11/19/2255263.html