我正在使用ASP.NET 2.0应用程序(由我的前任创建)。用户使用AD凭据登录,并且应用程序内完成的所有内容都使用这些凭据。我在应用程序中修改了与事件记录无关的页面,现在我的用户收到此错误:
以下是global.asax文件中的相关代码:
public void LogException(Exception e)
{
string exceptionXml = RenderException(e, true);
_EventLog.WriteEntry("Exception of type " + e.GetType().FullName + " occurred.\n\n" + exceptionXml, EventLogEntryType.Error);
}
RenderException()只是将异常XML放入一个扁平字符串中,删除空格。
我对如何摆脱这个错误感到茫然。我尝试使用iisreset重新发布网站。我尝试重新启动Web服务器(2k3 w / iis 6.0),刷新应用程序池。我还尝试在注册表中修改顶级事件日志键的权限。谁能告诉我如何摆脱这个错误?它不会发生在我的电脑上,因此很难复制。此外,使用的浏览器似乎并不重要。以前的版本适用于遇到此错误的相同人员。
答案 0 :(得分:0)
默认情况下, ASPNET 用户无法访问现有的事件日志类别。
如果您确实要将消息写入事件日志,则必须创建自己的类别
您还可以检查运行应用程序的用户是否属于正确的组,例如 IIS_WPG
答案 1 :(得分:0)
您似乎在_EventLog
实例上调用EventLog类的实例方法:
_EvengLog.WriteEvent(message, ...);
但是according to MSDN documentation for the EventLog class:
不保证所有实例成员都是线程安全的。
我怀疑这可能是您的问题的根源,并建议您使用其中一种静态方法(保证线程安全):
System.Diagnostics.EventLog.WriteEvent(source, message, ...);
或者你可以实现自己的同步,但我不建议这样做。