Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to close underlying connections after catch httpwebrequest timeout

My asp.net application sending httpwebrequest to remote REST server and waiting for the response, and I found there are lots of same error message like this:

System.Net.WebException: The operation has timed-out. at System.Net.HttpWebRequest.GetResponse()

Is that possible that after I catch this exception and close the underlying http connection directly? or I don't really have to do so since I already set keepalive to false?

Thanks.

Actually another questions is if the timeout exception always happened at System.Net.HttpWebRequest.GetResponse(), does that mean application is waiting for the response from remote server and could not get response until time out. what could be the possible reason, network connection not stable? remote server not response? any other possible reasons?

Here is the code:

System.Net.HttpWebResponse httpWebResponse = null;
System.IO.Stream stream  = null;
XmlTextReader xmlTextReader  = null;
try
{
    System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(request);
    httpWebRequest.ReadWriteTimeout = 10000;
    httpWebRequest.Timeout = 10000;
    httpWebRequest.KeepAlive = false;
    httpWebRequest.Method = "GET";
    httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
    stream = httpWebResponse.GetResponseStream();
    xmlTextReader = new  XmlTextReader(stream);
    xmlTextReader.Read();
    xmlDocument.Load(xmlTextReader);
    //Document processing code.
    //...
}
catch
{
    //Catch blcok with error handle
}
finally
{
    if (xmlTextReader != null)
        xmlTextReader.Close();
    if (httpWebResponse != null)
        httpWebResponse.Close();
    if (stream != null)
        stream.Close();
}
like image 809
machinegone Avatar asked Sep 03 '09 21:09

machinegone


2 Answers

The simple rule-of-thumb is that if it doesn't implement IDisposal then it doesn't need disposing of.

like image 55
Dan Diplo Avatar answered Oct 18 '22 18:10

Dan Diplo


Also you could increase the number of outbound connections in the machine.config:

<system.net>
  <connectionManagement>
     <add address="*" maxconnection="2" />
  </connectionManagement>
</system.net>

Change the maxconnection attr to something higher, see: http://www.williablog.net/williablog/post/2008/12/02/Increase-ASPNET-Scalability-Instantly.aspx

like image 1
Obiwan Avatar answered Oct 18 '22 18:10

Obiwan