C# HttpWebRequest总是在第一次失败后失败

C# HttpWebRequest总是在第一次失败后失败,c#,httpwebrequest,C#,Httpwebrequest,我的问题是:我的winform定期检查第三方Web服务以获取一些数据 只要没有网络问题,一切正常。。。但是,一旦我遇到一个问题(VPN关闭、质量不好等),我的应用程序就无法与Web服务联系(得到一个 “无法连接到远程服务器” 每次,后面跟着一个 SocketException:“连接尝试失败,因为 一段时间后,该方未作出适当回应,或 连接失败,因为连接的主机未能响应”) 我被迫重新启动我的应用程序,使它再次工作 我想这是一个关闭连接的问题,但是。。。无论我尝试什么(WebRequest或Http

我的问题是:我的winform定期检查第三方Web服务以获取一些数据

只要没有网络问题,一切正常。。。但是,一旦我遇到一个问题(VPN关闭、质量不好等),我的应用程序就无法与Web服务联系(得到一个

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

每次,后面跟着一个

SocketException:“连接尝试失败,因为 一段时间后,该方未作出适当回应,或 连接失败,因为连接的主机未能响应”)

我被迫重新启动我的应用程序,使它再次工作

我想这是一个关闭连接的问题,但是。。。无论我尝试什么(
WebRequest
HttpWebRequest
,关闭响应流…),结果都是一样的。。。 这是我目前的代码

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服务的安全性吗?

我看不出代码有任何错误,只是清理代码可能什么都没做。在调用
response.GetResponseStream().Close()
时,
StreamReader
已使用块在其封闭的
结尾处释放,这反过来将关闭流。catch块中的清理代码也是无用的,它可能引发未处理的异常


我知道这并不能解决您的问题,但从您提供的代码来看,问题并不明显。我可能建议在每次调用时添加一个具有不同值的查询参数,以防web服务忽略它,从而尽量避免任何可能的错误缓存

您是否尝试使用(…)
请求
包装为
?如下所示:
使用(var request=WebRequest.Create(strUrl)as HttpWebRequest){…}
使用from cmd.exe>Netstat-a来确定两个客户端和服务器上的连接是否仍然打开。我不喜欢using语句,因为它有自己的异常处理。我宁愿试着抓住例外情况。在异常句柄中,您可以添加Close()方法,该方法将修复该问题。现在,当发生异常时,不执行Close()。