将事件写入事件日志期间的WCF异常

时间:2011-11-04 16:00:47

标签: c# winforms wcf events exception

在托管名为my machine的WCF服务的主机(Windows 2008 R2)上写入事件日志时出现异常  来自WCFClient(Windows 7)在域内但在另一台机器上运行。

模拟WCF客户端访问服务器上的资源。

到目前为止,以下链接没有帮助

http://support.microsoft.com/kb/2028427#appliesto

http://forums.asp.net/t/1131903.aspx

http://msdn.microsoft.com/en-us/library/Aa379567(关于SDDL的删除) http://blogs.dirteam.com/blogs/jorge/archive/2008/03/26/parsing-sddl-strings.aspx(SDDL)

关于SO的类似问题,没有任何答案 https://stackoverflow.com/questions/6456444/allow-wcf-services-writing-to-custom-event-log-under-windows-2008-r2-server

例外情况如下

System.ServiceModel.FaultException`1 [System.ServiceModel.ExceptionDetail]:无法打开源“MyService”的日志。您可能没有写入权限。 (Fault Detail等于ExceptionDetail,可能由IncludeExceptionDetailInFaults = true创建,其值为: System.InvalidOperationException:无法打开源“MyService”的日志。您可能没有写入权限。 ----> System.ComponentModel.Win32Exception:访问被拒绝

---内部ExceptionDetail堆栈跟踪结束---    在System.Diagnostics.EventLogInternal.OpenForWrite(String currentMachineName)    at System.Diagnostics.EventLogInternal.InternalWriteEvent(UInt32 eventID,UInt16 category,EventLogEntryType type,String [] strings,Byte [] rawData,String currentMachineName)    at System.Diagnostics.EventLogInternal.WriteEntry(String message,EventLogEntryType type,Int32 eventID,Int16 category,Byte [] rawData)    在System.Diagnostics.EventLog.WriteEntry(String message,EventLogEntryType type)    ...................  .....................

2 个答案:

答案 0 :(得分:1)

这是自定义事件日志吗?如果是,请参阅

http://msdn.microsoft.com/en-us/library/49dwckkz(v=vs.80).aspx

- 特别是

  

通常,在安装应用程序期间创建新的事件源。这允许操作系统有时间刷新其已注册事件源列表及其配置。如果操作系统未刷新其事件源列表并且您尝试使用新源写入事件,则写入操作将失败。如果在安装期间创建源不是一个选项,那么尝试在第一次写入操作之前创建源,可能在应用程序初始化期间。 如果选择此方法,请确保您的初始化代码在计算机上以管理员权限运行。创建新事件源需要这些权利。

答案 1 :(得分:0)

修改了ProcesModel从NetworkService到LocalSystem的AppPool标识,一切正常。

虽然这不是面向公众的网站,并且是一个企业分布式设置,它将在自己的域内运行,但人们仍然可以争论安全风险。

可能的解决方案是

将事件编写代码与Imperosnation

分开

或仅提升违规代码的权限。