0

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

4

2 回答 2

0

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

_EvengLog.WriteEvent(message, ...);

根据 EventLog 类的 MSDN 文档

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

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

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

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

于 2013-08-26T20:16:38.917 回答
0

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

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

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

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

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

于 2013-08-26T17:24:29.130 回答