如何解决在IIS中托管主机时,实际异常未在MVC中记录
我正在运行一个MVC应用程序,在其中我发现了特定方法中的一个异常。我将在此处提供有关它的完整详细信息。
我正在从视图加载一些第三方网格控件。要加载它,我在下面的代码中使用了
@{Html.RenderAction("MasterGridAction","MyController");}
现在,当我从开发人员访问此报告时,此视图加载并命中此操作方法,在该方法中我使用了一些代码,这会引发错误,要捕获该错误,请尝试在catch部分中的方法中使用catch块我用下面的代码抛出如下所示的实际异常:
catch (Exception ex)
{
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(ex).Throw(); throw;
}
当捕获到异常时,它将其发送到global.asax页面中的Application_Error方法,在该页面中,我使用下面的代码来查找实际的异常,如下所示:
void Application_Error(object sender,EventArgs e)
{
HttpServerUtility server = HttpContext.Current.Server;
if (server.GetLastError() != null)
{
Exception exception = server.GetLastError();
if (exception.GetBaseException() != null)
{
exception = exception.GetBaseException();
ExceptionType(server,exception);
}
else
{
ExceptionType(server,exception);
}
}
}
在此ExceptionType方法中,我获取异常堆栈并使用“ Log4Net”登录到文件。登录到文件后,我可以在记事本中看到如下异常:
Object reference not set to an instance of an object.
Source File: /MyController/MasterGridAction
Stack Trace:
at 3D.Controllers.MyController.MasterGridAction() in D:\MyUser\3D_MVC\Application\3D_OnlyRelease\3D\Controllers\MyController.cs:line 405
--- End of stack trace from previous location where exception was thrown ---
正如我们在上面的异常中看到的那样,清楚地显示了行号以及捕获此异常的位置。 但是一旦我将此应用程序托管在IIS服务器中并访问同一页面,则可以看到记录的文件 那里显示了如下异常:
Exception Message: Object reference not set to an instance of an object.
Stack Trace: at 3D.Controllers.MyController.MasterGridAction()
--- End of stack trace from previous location where exception was thrown ---
与其他异常详细信息相比,您可以看到IIS服务器的记录异常没有太多信息。
在IIS中托管主机时,我是否缺少任何内容来获取完整的异常?
请提出建议。
解决方法
与其他异常详细信息相比,您可以看到IIS服务器的记录异常没有太多信息。
这可能是因为您没有在生产中包括PDB文件。
包含它们可能不是一个好主意,因为这样一来,如果黑客入侵您的服务器,则可以更精确地对您的应用程序进行反向工程,但是您可以自行决定。我见过将其包含在生产环境中的组织。
尝试在带有和不带有PDB文件的测试环境中进行发布和部署以进行验证。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。