The below piece of code is giving Error Message : "The operation has timed out" Error Sourse : at System.Net.httpWebRequest.GetResponse()
This method is calling a URL and fetching the response object.
NOTE : This is all working fine in my end..but when i send the same code to production..it shows time oout errors
public GetUpdatedInventoryUnitValues(Vehicle aeVehicle)
{
WebRequest oWebRequest = null;
StringBuilder oStringBuilder = null;
StreamReader oStreamReader = null;
dcDealerDetails = new Dictionary<string, string>();
MSRP = string.Empty;
NetPrice = string.Empty;
string strLine = string.Empty;
string strURL = GetUpdatedInventoryUnitValues.GetFormattedURL(aeVehicle);
try
{
/* Open the requested URL */
oWebRequest = WebRequest.Create(strURL);
oWebRequest.Method = "GET";
oWebRequest.ContentType = "application/xml";
/* Get the stream from the returned web response */
oStreamReader = new StreamReader(oWebRequest.GetResponse().GetResponseStream());
/* Get the stream from the returned web response */
oStringBuilder = new StringBuilder();
/* Read the stream a line at a time and place each one into the stringbuilder */
while ((strLine = oStreamReader.ReadLine()) != null)
{
/* Ignore blank lines */
if (strLine.Length > 0)
oStringBuilder.Append(strLine);
}
string[] tempArray = null;
string[] tempNextArray = null;
//Split string by semicolon as a separater
tempArray = Data.SplitString(oStringBuilder.ToString(), new char[] { ';' });
if (tempArray != null)
{
foreach (string invUnits in tempArray)
{
//Split string by '=' as a separater
tempNextArray = Data.SplitString(invUnits, new char[] { '=' });
if (tempNextArray != null && tempNextArray.Length == 2)
{
switch (tempNextArray[0].ToLower())
{
//case "msrp":
// MSRP = Data.RemoveDoubleCode(tempNextArray[1]);
// break;
case "netprice":
NetPrice = Data.RemoveDoubleCode(tempNextArray[1]);
break;
}
}
}
}
}
catch (Exception ex)
{
ErrorLog.ErrorMessage = ErrorLog.Separator;
ErrorLog.ErrorMessage = "Exception during posting data to another application .";
ErrorLog.ErrorMessage = "ERROR MESSAGE : " + ex.Message;
ErrorLog.ErrorMessage = "ERROR SOURCE: " + ex.StackTrace.ToString();
}
finally
{
if (oStreamReader != null)
{
oStreamReader.Close();
}
if (oWebRequest != null)
{
oWebRequest = null;
}
}
}
Please suggest what am i doing wrong or missing?
Are you perhaps finding that the first couple of requests are okay, and then they start timing out? If so, I suspect this is the problem:
oStreamReader = new StreamReader(oWebRequest.GetResponse().GetResponseStream());
You're fetching the response, but never disposing of it. You should use:
using (var response = oWebRequest.GetResponse())
{
...
}
In fact, you can get rid of your finally
block entirely if you use using
statements throughout.
As an aside, this is a pretty long method - 77 lines! - and worse, it looks like it's actually a constructor: