我有一个每小时运行的spjobdefinition(wss)。基于某些值,如果满足,它会将一个项目添加到日历列表中。此日历列表具有连接到逐项事件的事件接收器。

当作业确实触发并添加项目时,部分代码执行。我的意思是它不会“写入eventlog,它似乎有问题从web.config文件读取。

如果我手动将项目添加到日历列表,使用我的凭据,一切都正常工作。也就是说,我在eventlog中有事件,并从Web.config文件中读取项目。

我可以看到系统帐户在日历列表中添加项目的位置。我尝试将系统帐户添加到具有完全控制的组,并且我仍然存在问题。

是否有其他我需要查看的东西来工作?我检查了池用户和它的网络服务;我也向他们添加到该组。

我不确定别的地方。

感谢

更新(这是我用来写入eventlog的代码)

try
{
  System.Security.Principal.WindowsImpersonationContext wic = System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero);
  EventLog.WriteEntry(source, message, type);
  wic.Undo();
}
catch (Exception)
{
}
.

有帮助吗?

解决方案

写入eventlog可能是由于缺少Windows权限。

定时器作业在Windows服务中运行,该服务没有Web.config。事件接收器在导致事件的任何过程中运行。因此,如果您尝试阅读当前进程的Web.config它将失败。

如果您尝试进入文件系统以读取Web.config,那么它可能再次成为Windows权限。

将用户添加到SharePoint组无法帮助您访问Eventlog或文件,这些是Windows对象而不是SharePoint对象。

从定时器作业运行时,Impersonate(IntPtr.Zero);不会更改任何内容。它冒充了已经是一个正在运行的过程帐户。

许可以下: CC-BY-SA归因
scroll top