SharePoint 2010 自定义Timer job 问题总结(拒绝访问,Execute方法不执行,不及时更新)
2012-09-10 15:30
375 查看
/article/11196103.html
在上面的链接中,我写了关于如何自定义一个简单的Timer job。这个是在我自己电脑里完成的,一切都很顺利。可是到客户这里就不行了。
在feature的激活事件里,调用update()时提示拒绝访问。即使我使用SPSecurity.RunWithElevatedPrivileges提升权限也不行。经过google总结如下:
首先,要正确理解SPSecurity.RunWithElevatedPrivileges提升的权限是什么。在sharepoint 2010 提供了两种类型数据库,一种是内容数据库(Content Database),一种是配置数据库,默认名字应该叫Sharepoint_Config。
内容数据库,顾名思义,就是存放sharepoint中的内容的,比如列表数据,上传的文档等。配置数据库就是存放全局配置的,它在安装sharepoint的时候生成,而且就一个。
SPSecurity.RunWithElevatedPrivileges提示的权限指的是往内容数据库写数据的权限。比如,当你更新或添加列表项时,提示拒绝访问,使用该功能提升权限基本都可以解决。但是配置数据库的写入权限则不是该方法可以提升的。而计时器(Timer Job)则需要在配置数据库里写入数据,它也就无能为力了。
对于配置数据的对应的级别是场或应用程序,而内容数据库对应的是网站集或网站。换句话说,最好将timer job对应的feature注册范围设置为场或应用程序级别,这么做可能会解决您的问题。Kaneboy回答我的问题时,曾说说网站集级别的feature事件接收器无法注册计时器。我想就是这个原因。
而我的计时器注册范围是网站集,而且我试图将其设置或场或应用程序级别,仍然不行。那么我只要保持网站集级别的部署范围,然后想办法提示权限了。
经查证:1.在配置数据库里写入数据,需要数据库账号拥有wss_content_application_pools角色,参考:http://www.sharepointsecurity.com/sharepoint/sharepoint-security/fixing-access-denied-errors-with-sharepoint-2010-timer-jobs/
2.还有人建议说将我的应用程序池和管理中心应用程序池账号设为一致,这个方法不适合我,毕竟是在客户环境中,这个是下下策。
微软的一篇文章提到这样的问题,好像是建议用stsadm来部署和激活feature,这个我觉得也不好,有兴趣的可以参考:
http://msdn.microsoft.com/zh-cn/library/cc427068.aspx
3.在微软网站上,还有另外一个解决办法,这个我试了一下完全可以。
可参考http://support.microsoft.com/kb/2564009
4.也是我采用的方法,很简单。在继承SPJobDefinition的类中,重写HasAdditionalUpdateAccess()方法,如下:
protected override bool HasAdditionalUpdateAccess()
{
return true;
}
第二个问题,就是计时器的Execute方法不执行。这个原因很简单,就是对于的计时器服务没有启动。可以再命令提示符里输入:
net start sptimerv4
如图提示,无法启动,那就需要进入:开始--管理工具--服务 找到SharePoint 2010 Timer,在登录选项卡中更改账户,重新启动了。
参考http://technet.microsoft.com/en-us/library/ff182790.aspx
第三个问题,更新计时器后,重新部署,执行结果并不是最新的。这个也简单,重启一下IIS,如果还不行,就重启sptimerv4
更多参考:
http://dotnetfinder.wordpress.com/2010/07/24/creatingcustomsharepointtimerjob2010/
http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx
http://social.msdn.microsoft.com/Forums/en/sharepointdevelopment/thread/696a640f-4b8d-44ce-a970-e05bd45c437f
http://social.technet.microsoft.com/Forums/lv-LV/sharepoint2010programming/thread/554f0878-51cc-4caa-9812-82260a5afcd9
http://www.sharepointblues.com/2010/10/22/custom-spjobdefinition-and-access-denied-error/
在上面的链接中,我写了关于如何自定义一个简单的Timer job。这个是在我自己电脑里完成的,一切都很顺利。可是到客户这里就不行了。
在feature的激活事件里,调用update()时提示拒绝访问。即使我使用SPSecurity.RunWithElevatedPrivileges提升权限也不行。经过google总结如下:
首先,要正确理解SPSecurity.RunWithElevatedPrivileges提升的权限是什么。在sharepoint 2010 提供了两种类型数据库,一种是内容数据库(Content Database),一种是配置数据库,默认名字应该叫Sharepoint_Config。
内容数据库,顾名思义,就是存放sharepoint中的内容的,比如列表数据,上传的文档等。配置数据库就是存放全局配置的,它在安装sharepoint的时候生成,而且就一个。
SPSecurity.RunWithElevatedPrivileges提示的权限指的是往内容数据库写数据的权限。比如,当你更新或添加列表项时,提示拒绝访问,使用该功能提升权限基本都可以解决。但是配置数据库的写入权限则不是该方法可以提升的。而计时器(Timer Job)则需要在配置数据库里写入数据,它也就无能为力了。
对于配置数据的对应的级别是场或应用程序,而内容数据库对应的是网站集或网站。换句话说,最好将timer job对应的feature注册范围设置为场或应用程序级别,这么做可能会解决您的问题。Kaneboy回答我的问题时,曾说说网站集级别的feature事件接收器无法注册计时器。我想就是这个原因。
而我的计时器注册范围是网站集,而且我试图将其设置或场或应用程序级别,仍然不行。那么我只要保持网站集级别的部署范围,然后想办法提示权限了。
经查证:1.在配置数据库里写入数据,需要数据库账号拥有wss_content_application_pools角色,参考:http://www.sharepointsecurity.com/sharepoint/sharepoint-security/fixing-access-denied-errors-with-sharepoint-2010-timer-jobs/
2.还有人建议说将我的应用程序池和管理中心应用程序池账号设为一致,这个方法不适合我,毕竟是在客户环境中,这个是下下策。
微软的一篇文章提到这样的问题,好像是建议用stsadm来部署和激活feature,这个我觉得也不好,有兴趣的可以参考:
http://msdn.microsoft.com/zh-cn/library/cc427068.aspx
3.在微软网站上,还有另外一个解决办法,这个我试了一下完全可以。
可参考http://support.microsoft.com/kb/2564009
4.也是我采用的方法,很简单。在继承SPJobDefinition的类中,重写HasAdditionalUpdateAccess()方法,如下:
protected override bool HasAdditionalUpdateAccess()
{
return true;
}
第二个问题,就是计时器的Execute方法不执行。这个原因很简单,就是对于的计时器服务没有启动。可以再命令提示符里输入:
net start sptimerv4
如图提示,无法启动,那就需要进入:开始--管理工具--服务 找到SharePoint 2010 Timer,在登录选项卡中更改账户,重新启动了。
参考http://technet.microsoft.com/en-us/library/ff182790.aspx
第三个问题,更新计时器后,重新部署,执行结果并不是最新的。这个也简单,重启一下IIS,如果还不行,就重启sptimerv4
更多参考:
http://dotnetfinder.wordpress.com/2010/07/24/creatingcustomsharepointtimerjob2010/
http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx
http://social.msdn.microsoft.com/Forums/en/sharepointdevelopment/thread/696a640f-4b8d-44ce-a970-e05bd45c437f
http://social.technet.microsoft.com/Forums/lv-LV/sharepoint2010programming/thread/554f0878-51cc-4caa-9812-82260a5afcd9
http://www.sharepointblues.com/2010/10/22/custom-spjobdefinition-and-access-denied-error/
相关文章推荐
- SharePoint 2010 自定义Timer job 问题总结(拒绝访问,Execute方法不执行,不及时更新)
- httpClient访问网络,httpclient.execute(httpGet)方法不执行问题
- Sharepoint 2010 BDC 之 访问已被业务数据连接拒绝 ,经过九九八十一难修成正果
- Sharepoint 2010 BDC 之 访问已被业务数据连接拒绝
- SharePoint 2010 SPFieldLookup,SPFieldChoice更新值方法
- 在AsyncTask的doInBackground方法中调用HttpClient的execute方法,HttpGet地址为内网时无问题,部署到外网就不执行了
- SharePoint 2010 -- 常用技巧及方法总结
- 使用复制存储过程执行解决“事务复制中的表大量更新导致无法及时同步”的问题
- sharepoint 2010 FieldLookup 的更新方法
- oozie 执行examples 报80020端口拒绝访问问题解决汇总
- 配置IIS是出现的问题-执行访问被拒绝-备忘
- “HTTP 错误 403.1 - 禁止访问:执行访问被拒绝”解决方法
- SharePoint 2010常用技巧及方法总结
- Linq ExecuteQuery方法执行结果的枚举问题
- Win8双系统中某个盘“拒绝访问“问题的解决方法
- sharepoint 2010 中添加webpart时引用dll一些问题及解决方法。
- 关于AJAX访问数据库不能及时获得更新数据的问题
- 天健通泰项目经验总结服务器篇——SQL Server不存在或拒绝访问解决方法
- XP无法访问SharePoint 2010的问题
- 使用复制存储过程执行解决“事务复制中的表大量更新导致无法及时同步”的问题 (转)