D
donler
I call this code multiple times. After some period of time (I don't know how
long, sometimes after a short period and then it will recover),
(HttpWebResponse)webRequest.GetResponse() starts to timeout. At some point
it will continue to timeout and never recover until I stop the app and start
it backup. Here is the code.
Thx for any help
public string SendRequestTo( WebHeaderCollection whc, byte[] requestBytes,
string method,
string accept, bool autoRedirect, string contentType, bool keepAlive,
Uri destination, NetworkCredential credential )
{
Debug.WriteLine( "Sending request to url:" + destination.AbsoluteUri );
// Build the request.
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(destination);
//Add headers if there are any
if ( whc != null && whc.Count > 0 )
{
webRequest.Headers = new WebHeaderCollection();
webRequest.Headers = whc;
}
webRequest.Method = method;
webRequest.Accept = accept;
webRequest.AllowAutoRedirect = autoRedirect;
webRequest.UserAgent = "Outlook-Express/6.0 (MSIE 6.0; Windows NT 5.1;
Q312461; " +
".NET CLR 1.0.3705; .NET CLR 1.1.4322; TmstmpExt)";
webRequest.KeepAlive = keepAlive;
if ( requestBytes != null )
webRequest.ContentLength = requestBytes.Length;
else
webRequest.ContentLength = 0;
webRequest.ContentType = contentType;
// Set the credentials
webRequest.Credentials = credential;
// Add cookies for this request
webRequest.CookieContainer = new CookieContainer();
webRequest.CookieContainer.Add(_ccContainer.GetCookies(destination));
try
{
// Write the request
Stream reqStream = webRequest.GetRequestStream();
//Only write the bytes if the byte buffer isn't null
if ( requestBytes != null )
reqStream.Write( requestBytes, 0, requestBytes.Length );
reqStream.Close();
//******************** Problem Child **********************//
// Get a response
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
//******************** Problem Child **********************//
if (webRequest.HaveResponse)
{
// Handle returned cookies
foreach(Cookie retCookie in webResponse.Cookies)
{
bool cookieFound = false;
foreach( Cookie oldCookie in _ccContainer.GetCookies( destination ) )
{
if ( retCookie.Name.Equals( oldCookie.Name ) )
{
oldCookie.Value = retCookie.Value;
cookieFound = true;
}
}
if ( !cookieFound )
_ccContainer.Add( retCookie );
}
// Handle redirection headers
if ((webResponse.StatusCode == HttpStatusCode.Found) ||
(webResponse.StatusCode == HttpStatusCode.Redirect) ||
(webResponse.StatusCode == HttpStatusCode.Moved) ||
(webResponse.StatusCode == HttpStatusCode.MovedPermanently))
{
WebHeaderCollection headers = webResponse.Headers;
return this.SendRequestTo( whc, requestBytes, method, accept,
autoRedirect, contentType, keepAlive,
new Uri( headers["location"] ), credential );
}
// Read response
StreamReader stream = new StreamReader(webResponse.GetResponseStream());
string responseString = stream.ReadToEnd();
stream.Close();
return responseString;
}
// No response
Debug.WriteLine("No response received from host.");
throw new ApplicationException("No response received from host.");
}
catch(WebException e)
{
// Error occured
Debug.WriteLine("WebException: " + e.ToString());
throw new ApplicationException("WebException: ", e);
}
catch(Exception ex)
{
Debug.WriteLine("Exception: " + ex.ToString());
throw new ApplicationException("Exception: ", ex);
}
}
long, sometimes after a short period and then it will recover),
(HttpWebResponse)webRequest.GetResponse() starts to timeout. At some point
it will continue to timeout and never recover until I stop the app and start
it backup. Here is the code.
Thx for any help
public string SendRequestTo( WebHeaderCollection whc, byte[] requestBytes,
string method,
string accept, bool autoRedirect, string contentType, bool keepAlive,
Uri destination, NetworkCredential credential )
{
Debug.WriteLine( "Sending request to url:" + destination.AbsoluteUri );
// Build the request.
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(destination);
//Add headers if there are any
if ( whc != null && whc.Count > 0 )
{
webRequest.Headers = new WebHeaderCollection();
webRequest.Headers = whc;
}
webRequest.Method = method;
webRequest.Accept = accept;
webRequest.AllowAutoRedirect = autoRedirect;
webRequest.UserAgent = "Outlook-Express/6.0 (MSIE 6.0; Windows NT 5.1;
Q312461; " +
".NET CLR 1.0.3705; .NET CLR 1.1.4322; TmstmpExt)";
webRequest.KeepAlive = keepAlive;
if ( requestBytes != null )
webRequest.ContentLength = requestBytes.Length;
else
webRequest.ContentLength = 0;
webRequest.ContentType = contentType;
// Set the credentials
webRequest.Credentials = credential;
// Add cookies for this request
webRequest.CookieContainer = new CookieContainer();
webRequest.CookieContainer.Add(_ccContainer.GetCookies(destination));
try
{
// Write the request
Stream reqStream = webRequest.GetRequestStream();
//Only write the bytes if the byte buffer isn't null
if ( requestBytes != null )
reqStream.Write( requestBytes, 0, requestBytes.Length );
reqStream.Close();
//******************** Problem Child **********************//
// Get a response
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
//******************** Problem Child **********************//
if (webRequest.HaveResponse)
{
// Handle returned cookies
foreach(Cookie retCookie in webResponse.Cookies)
{
bool cookieFound = false;
foreach( Cookie oldCookie in _ccContainer.GetCookies( destination ) )
{
if ( retCookie.Name.Equals( oldCookie.Name ) )
{
oldCookie.Value = retCookie.Value;
cookieFound = true;
}
}
if ( !cookieFound )
_ccContainer.Add( retCookie );
}
// Handle redirection headers
if ((webResponse.StatusCode == HttpStatusCode.Found) ||
(webResponse.StatusCode == HttpStatusCode.Redirect) ||
(webResponse.StatusCode == HttpStatusCode.Moved) ||
(webResponse.StatusCode == HttpStatusCode.MovedPermanently))
{
WebHeaderCollection headers = webResponse.Headers;
return this.SendRequestTo( whc, requestBytes, method, accept,
autoRedirect, contentType, keepAlive,
new Uri( headers["location"] ), credential );
}
// Read response
StreamReader stream = new StreamReader(webResponse.GetResponseStream());
string responseString = stream.ReadToEnd();
stream.Close();
return responseString;
}
// No response
Debug.WriteLine("No response received from host.");
throw new ApplicationException("No response received from host.");
}
catch(WebException e)
{
// Error occured
Debug.WriteLine("WebException: " + e.ToString());
throw new ApplicationException("WebException: ", e);
}
catch(Exception ex)
{
Debug.WriteLine("Exception: " + ex.ToString());
throw new ApplicationException("Exception: ", ex);
}
}