这个问题令我难过。它在我们的生产服务器上发生了三次,在过去的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();
}
答案 0 :(得分:1)
错误可能与资源泄漏有关。 response
,reader
和response.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();
}
}
}