我正尝试在Genexus Ev1(C#生成器)中处理复制级别的错误,以便在发生异常时将其记录下来。
在网络上搜索发现可以通过以下方法解决要求:
在web.config级别添加CustomError页面可以正常工作,但是我无法在该页面中检索服务器有关该错误的信息。下面显示的变量&ErrorMsg始终返回空
Event Start
&ErrorMsg.SetEmpty()
CSHARP System.Web.HttpServerUtility Server = System.Web.HttpContext.Current.Server;
CSHARP Exception ex = Server.GetLastError();
CSHARP if (ex != null) {
CSHARP ex = ex.GetBaseException();
CSHARP [!&ErrorMsg!] = ex.ToString();
CSHARP }
EndEvent
上面的代码(以及许多其他变体)不起作用。
我认为可以,因为到达执行该代码的错误页面时服务器异常已清除,因此异常为null,则必须将Global.asax文件配置为捕获并传输该异常
问题:
在GeneXus网络应用程序上没有global.asax文件,因此,在下面手动执行代码中添加该文件也不起作用
<%@ language="C#" %>
<script runat="server">
void Application_Error(object sender, EventArgs e){
// Code that runs when an unhandled error occurs.
// Get last error from the server
Exception exc = Server.GetLastError();
if (exc is HttpUnhandledException){
if (exc.InnerException != null){
exc = new Exception(exc.InnerException.Message);
Server.Transfer("ErrorPageLog.aspx?handler=Application_Error%20-%20Global.asax",
true);
}
}
}
有人已经尝试在GeneXus中这样做吗? 任何人都可以澄清我在做什么错吗?
答案 0 :(得分:0)
经过几天的研究,我设法解决了这个问题。
这是我所做的:
编辑文件内容并添加此代码
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Session["ServerException"] = "";
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
}
protected void Application_Error(Object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs.
// Get last error from the server
Exception exc = Server.GetLastError();
Session["ServerException"] = exc.InnerException.Message;
Server.ClearError();
Response.Clear();
Response.Redirect("ErrorPageLog.aspx");
}
</script>
在GeneXus KB中创建新的Web面板并将其命名为ErrorPageLog
编辑事件开始,添加此代码并构建它
Event Start
&ErrorMsg.SetEmpty()
CSHARP [!&ErrorMsg!] = System.Web.HttpContext.Current.Session["ServerException"].ToString();
EndEvent
那应该将应用程序错误引发的Web会话转移到页面上,然后您可以对消息执行任何操作,还可以管理发生在GeneXus代码中的消息。
注意:在此示例中,我发送的是有关异常的最简单信息,可以管理有关该异常的更多详细信息。