Служба ASPNetMVC, размещенная на IIS в производственной среде, иногда имеет странные исключения.
В асинхронном режиме пишется try-catch-finally, и в блоке try есть сетевой запрос. При нормальных обстоятельствах, когда исключение происходит в сетевом запросе, перехват поймает исключение Однако на производственном сервере иногда возникает исключение, которое не перехватывается, и логика в обоих случаях перехватывает и, наконец, не выполняется.
окружающая среда:
- Windows service 2008 R2
- IIS8
- .Net Framework 4.5.2
public static string post(string url, string method, object postdata, bool iscache = false)
{
var uuid = Guid.NewGuid().ToString().ToUpper().Split('-').ToList().Last() + " ";
TraceLog.m_Trace.Trace(uuid + method + " url=" + url); // write log 1
var rs = "";
var key = "";
try
{
var data = "";
if (postdata is string)
data = postdata as string;
else
data = Newtonsoft.Json.JsonConvert.SerializeObject(postdata);
TraceLog.m_Trace.Trace(uuid + method + " postdata=" + data); // write log 2
if (iscache)
{
// return cache ...
}
var req = (HttpWebRequest)WebRequest.Create(url);
req.Headers.Add("Cache-Control", "no-cache");
req.Headers.Add("MethodName", method);
req.Method = "POST";
req.ContentType = "application/json";
var send = Encoding.UTF8.GetBytes(data);
req.ContentLength = send.Length;
req.Timeout = 60 * 1000;
var nsm = req.GetRequestStream();
nsm.Write(send, 0, send.Length);
nsm.Close();
var resp = (HttpWebResponse)req.GetResponse();
var sm = resp.GetResponseStream();
var sr = new StreamReader(sm, Encoding.GetEncoding("utf-8"));
rs = sr.ReadToEnd();
sr.Close();
sr.Dispose();
sm.Close();
}
catch (Exception ex)
{
TraceLog.m_Trace.Trace(uuid + method + " ex=" + ex.ToString()); // write log 3
return new BaseResponse(ex.Message).ToString();
}
if (iscache && rs.Contains("IsSuccess\":true,"))
{
TraceLog.m_Trace.Trace(uuid + key + " wrrite cache..."); / write log 4
CacheHelper.Max(key, rs);
}
TraceLog.m_Trace.Trace(uuid + method + " rs=" + rs); // write log 5
return rs;
}
Была ли у вас когда-нибудь эта проблема? Я гуглил два дня и не нашел подобного образца. Надеюсь получить вашу помощь! При каких обстоятельствах возникнет эта проблема и как ее решить?