SharePoint log分析——一句SQL语句找出无效的Event Receiver

在SharePoint的log中有时候会出现这样的错误信息:

“Couldnot load file or assembly 'AssemblyName,Version=..., Culture=neutral, PublicKeyToken=... ...' or one ofits dependencies. The system cannot find the file specified.”

从这里可以判断出某个代码集找不到了,如果在Event Viewer中可以看到Event ID为6644的错误,例如:

Event Type: Error
Event Source: 
Event Category: General 
Event ID: 6644
Date:  1/10/2012
Time:  10:26:44 AM
User:  N/A
Computer: 
Description:

这时就可以断定SharePoint系统中出现了无效的Event Receiver了(即Orphaned Event Receiver)。

无效的Event Receiver就是其所引用的代码集丢失了的event receiver,大家知道在定义Event Receiver的时候,需要指定所引用的代码集,如果执行event receiver的时候,找不到代码集,就会出现这样的错误信息。

出现问题的可能原因是:一般在feature被激活的时候通过代码创建event receivers,在deactivate feature的时候,删除event receivers,如果没有deactivate feature,直接在管理中心retract或者delete solution,就可能造成这样的错误。

一般解决问题的方法就是重新部署solution,或者彻底删除无效的event receivers。重新部署就没什么可以说的了,如果是想删除这些event receivers,首先需要找到都是哪些list中的event receivers是无效的,这里有一个方法,可以在内容数据库中执行以下查询语句,一次查找出来所有的跟某个代码集有关的无效event receivers:

select webs.Title, Alllists.tp_Title from EventReceivers with (nolock) 
inner join Webs on EventReceivers.WebId = webs.Id
inner join AllLists on EventReceivers.HostId = Alllists.tp_ID
where Assembly like '%代码集的名字%'

其中表“EventReceivers”中保存了所有的event receiver的信息,其中的“Assembly”列中保存的是其所引用的代码集的名字。因为“EventReceivers”表中只保存了站点和列表的id,所以要连接“Webs”和“AllLists”表来获得站点和列表的名字。

这样就可以找到所有的与某个代码集相关的无效event receivers了,然后可以使用这个工具,将它们删除干净:EventReceiver Manager


也可以使用SharePoint Management Shell命令找出无效的event receivers,并将它们删除,参见:点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值