System.Net.WebRequest - TCP连接重用/缓存?

时间:2010-10-19 03:27:41

标签: .net webrequest

这个问题令我难过。它在我们的生产服务器上发生了三次,在过去的12个月内发生了重大问题。任何帮助将不胜感激。

我们有一个.NET Windows服务,可以将HTTP请求发送到第三方服务器。 “Something”发生,接下来的2-3个请求因服务器错误503而失败,后续请求获得超时异常。听起来像服务器问题吧?但是,如果我在浏览器中键入请求URL,则返回响应。

通过重新启动.NET服务解决了这个问题,现在让我觉得这是一个客户端问题,但我想不出如何。是否正在重用或缓存与服务器的基础TCP连接?有没有办法可以强制.NET重新创建连接?

以下是网络请求代码。

public string GetResponseFromServer( string requestXML, string serverUrl, int Timeout )
{
    System.Net.WebRequest req = System.Net.WebRequest.Create( serverUrl );
    req.Method = "POST";
    req.Timeout = Timeout;

    byte[] requestBodyBytes = System.Text.Encoding.UTF8.GetBytes( requestXML );

    req.ContentLength = requestBodyBytes.Length;

    Stream newStream = req.GetRequestStream();
    newStream.Write( requestBodyBytes, 0, requestBodyBytes.Length );
    newStream.Close();

    System.Net.WebResponse response = req.GetResponse();

    StreamReader reader = new StreamReader( response.GetResponseStream() );
    return reader.ReadToEnd();
}

1 个答案:

答案 0 :(得分:1)

错误可能与资源泄漏有关。 responsereaderresponse.GetResponseStream()返回的流都未被处置。在using语句中包含这些资源,以确保它们都得到妥善处理:

using (Stream newStream = req.GetRequestStream())
{
  newStream.Write( requestBodyBytes, 0, requestBodyBytes.Length );
}

using (System.Net.WebResponse response = req.GetResponse())
{
  using (Stream responseStream = response.GetResponseStream())
  {
    using (StreamReader reader = new StreamReader( responseStream ))
    {
      return reader.ReadToEnd();
    }
  }
}