SPS2003和WSS上的Alert机制

Alert是SPS2003和WSS上很有用的一个功能,可以及时告诉我们信息的变更。但经常,这项功能会工作不正常。要解决这个问题,应该先明白在SPS2003和WSS中,Alert产生的机制是怎么样的。

在SPS2003中,简单地来说,Alert是经过下面的步骤产生的:

1. 我们在门户网站上添加了一些新的内容以后,SPS会在更新索引的同时,把相关的信息添加到_SERV数据库中。

2. SPS会从_SERV数据库获取这些信息,然后把这些Alert的信息添加到“我的网站”上的关于Alert的Web Part中。到了这一步,就意味着成功了一半了。

3. SPS同时会把关于这些Alert的信息添加到_SERV数据库的sub_Notification表格中。

4. SPSAlert会定期检查sub_Notification表格,如果发现有内容,那么就生成邮件,并检查Alert的接收者是否有权限收到这个Alert。如果可以,那么发送Alert。

这里可能会出错的地方有:

1. 如果SPS2003上的索引不正确,或者新添加的内容不能被正确索引,那么肯定下面的步骤都不行了。

[方法] 可以尝试搜索新添加的内容,或者查看在“我的网站”上的关于Alert的Web Part中,有没有关于Alert的信息。

2. 如果SPSAlert服务没有运行,也不会生成Alert。

[方法] 可以检查SPSAlert服务的状态,或者查看sub_Notification表格,正常情况下,会看到有新的内容被添加近来,一段时间以后再被自动删除掉。

3. Alert的接收者没有权限。

[方法] 如果用户的权限发生了变化,导致不再能够收到Alert,那么Alert是不会再被发送出来的。

同时,如果这是一个Windows 2003的域,那么不会有这个问题,每一个域账号都是有权限的。但如果是一个Windows 2000的域,就需要注意了。如果是一个Pre-Windows 2000 Compatible模式的Windows 2000域,那么默认情况下,一般的普通账号就没有权限了。

需要做的事情是:

1) 将接收订阅的用户添加到了Pre-Windows 2000 Compatible Access组中。

2) 需要安装一个hot fix: https://support.microsoft.com/?id=834859.

4. 最后一步,就是检查SMTP服务器了。

 

如果使用的是WSS中的Alert,那么又是另外一回事情了。在WSS上,其实只有一个_Site数据库,是没有_Serv数据库的。所以WSS中的Alert和SPS2003上的Alert的机制是不一样的。

在WSS上,Alert产生的机制是:

1. 首先,当我们往一个List或者文档库中添加了一个新的内容以后,会有SQL中的一个Store Procedure来检查这个List或者文档库上有没有Alert订阅。如果有,那么加一条记录到_Site数据库的EventCache或者EventLog表格中。如果是一个立即发送的Alert,那么添加到EventCache中,否则就到EventLog中。

2. SharePoint timer服务会定期检查EventCache和EventLog表格。如果有新的内容,就生成Alert,然后通过SMTP服务器发送出来。

这里可能产生错误的地方要少得多。一般来说,SQL上的Store Procedure是不会有问题的,所以一般就检查SharePoint timer服务有没有在运行,以及SMTP服务器的设置。