繁体   English   中英

使用ASP.NET写入事件日志时出现“句柄无效”错误

[英]“The handle is invalid” error when writing to eventlog using ASP.NET

我正在使用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),刷新应用程序池。 我还尝试过修改注册表中顶级事件日志项的权限。 谁能告诉我如何摆脱这个错误? 它不会在我的计算机上发生,因此很难复制。 另外,所使用的浏览器似乎无关紧要。 以前的版本适用于遇到此错误的相同人员。

默认情况下, ASPNET用户无法访问现有的事件日志类别。

如果确实要将消息写入事件日志,则必须创建自己的类别

  1. 启动RegEdit
  2. 导航到HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlSet \\ Services \\ EventLog \\
  3. 从菜单中,选择编辑->权限
  4. 单击添加按钮,然后编写ASPNET。 (如果ASP.NET在其他用户ID下运行,请改用该ID)
  5. 单击确定。
  6. 从列表中选择新添加的用户(默认情况下为ASP.NET Machine User)。
  7. 单击“允许”列中的“完全控制”。
  8. 单击确定。

您还可以检查运行应用程序的用户是否属于正确的组,例如IIS_WPG。

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/3648346f-e4f5-474b-86c7-5a86e85fa1ff.mspx?mfr=true

您似乎正在_EventLog实例上调用EventLog类的实例方法:

_EvengLog.WriteEvent(message, ...);

但是根据MSDN文档中的EventLog类

不保证任何实例成员都是线程安全的。

我怀疑这可能是您的问题的根源,并建议您使用一种静态方法(保证是线程安全的):

System.Diagnostics.EventLog.WriteEvent(source, message, ...);

或者,您可以实现自己的同步,但是我不建议这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM