我正在使用MVC项目,并且已经在Global.ascx
中记录了应用程序错误。
这是我的代码
protected void Application_Error(Object sender, System.EventArgs e)
{
System.Web.HttpContext context = HttpContext.Current;
System.Exception exception = Context.Server.GetLastError();
var stackTraceExcep = new StackTrace(exception, true); // create the stack trace
var stackTrace = stackTraceExcep.GetFrames() // get the frames
.Select(frame => new
{ // get the info
FileName = frame.GetFileName(),
LineNumber = frame.GetFileLineNumber(),
ColumnNumber = frame.GetFileColumnNumber(),
Method = frame.GetMethod(),
Class = frame.GetMethod().DeclaringType,
}).FirstOrDefault();
string FileName = stackTrace.FileName;
string LineNumber = stackTrace.LineNumber.ToString();
string ColumnNumber = stackTrace.ColumnNumber.ToString();
string MethodName = stackTrace.Method.Name;
string ClassName = stackTrace.Class.Name;
int Errornumber = Convert.ToInt32(errorRepository.AddError(exception.Message, FileName, Convert.ToInt32(LineNumber), Convert.ToInt32(ColumnNumber), MethodName, ClassName));//This line helps to stores the error in my database.
Response.Redirect(String.Format("~/Error/{0}/?errorNumber={1}", "App_Error", Server.UrlEncode(Errornumber.ToString())));//Pass the error number to a cantroller for show the error number(last inserted id) in view
context.Server.ClearError();
}
好的,让我在这里解决问题
上面的代码在我的本地计算机上正常运行。此代码将(error path , error name ,error line number ,error column number, error method name, error class name .
)存储在数据库中。
现在,当我发布我的项目并在服务器上部署发布版本时(Arvixe
)。
我的应用程序错误方法中的代码适用于class name method name and exception message
并将此数据存储在数据库中,但error line number
和error column number
未存储在数据库中。我看到了数据库,它什么都没有存储。
有什么问题?为什么在部署到Web服务器时未存储error line number
和error column name
(一切在我的本地系统上运行正常)?
我有些怀疑
1)该项目是一个已发布的版本,因此所有项目文件(类,控制器,模型等(我认为你知道))都转换为DLL,所以我猜StackTrace
没有得到错误行细节?我对么 ?否则告诉我。
2)服务器没有visual studio。所以我想这不起作用?我还有其他的告诉我吗?
答案 0 :(得分:0)
似乎没有正确设置连接字符串。当无法连接到数据库时,会发生Handle Application错误。打开web.config文件并在那里添加连接字符串。