第一次失败后HttpWebRequest总是失败

时间:2018-08-14 09:07:09

标签: c# httpwebrequest

这是我的问题:我的winform会定期检查第三方网络服务以获取一些数据。

只要没有网络问题,一切就可以正常工作……但是,一旦我遇到一个问题(VPN断开,质量差等),我的应用程序就无法与网络服务联系(得到一个

  

“无法连接到远程服务器”

每次,然后是

  

SocketException:“连接失败,因为已连接   一段时间后未正确响应,或已建立   连接失败,因为已连接的主机无法响应”)。

我被迫重新启动我的应用程序以使其再次运行...

我想这是关闭连接之类的问题,但是...无论我尝试什么(WebRequestHttpWebRequest,关闭响应流...),结果都是相同的... 这是我当前的代码

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
request.Credentials = new NetworkCredential(strIdCredential, strPasswordCredential);
try
{
   string strReturnValue = "";
   using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
   {
      using (Stream data = response.GetResponseStream())
      {
         using (StreamReader sr = new StreamReader(data))
         {
            strReturnValue = sr.ReadToEnd();
         }
         response.GetResponseStream().Close();
      }
   } 
   return strReturnValue;
}
catch (WebException e)
{
   using(var response = e.Response)
   {
      if (response != null)
        response.GetResponseStream().Close();
   }
   return cstrNetworkError;
}

我做错什么了吗? Web服务安全吗?

1 个答案:

答案 0 :(得分:0)

我看不到代码有什么问题,除了清除代码什么都不做。在您调用response.GetResponseStream().Close()时,StreamReader已经放置在其封闭的using块的末尾,该块又将关闭流。 catch块中的清理代码也没有用,并且可能引发无法处理的异常。

我知道这不能解决您的问题,但是从您提供的代码来看,问题并不明显。我可能建议尝试通过在每次调用时添加一个具有不同值的查询参数来避免在此过程中可能的错误缓存,以防Web服务足以忽略它。