SharePoint OWSTIMER服务保留对功能接收器程序集的引用

时间:2011-02-18 23:37:01

标签: .net sharepoint gac fusion

使用SharePoint,您可以使用Feature Receiver在安装/卸载功能等时执行某些操作。

功能接收器是从OWSTIMER服务运行的,过程似乎大致是

  • .wsp(一个cab文件)被解压缩并检查
  • .dll被移至bin / gac
  • 清单中标记的功能接收器由服务
  • 调用(只能在GAC中)

但是,OWSTIMER会在包含功能接收器的dll上打开句柄。

这意味着当您卸载功能时,Fusion会将dll移动到c:\ windows \ temp \目录并保持引用。 (更多详情herehere

当您尝试安装新版本(程序集文件版本不同但程序集版本必须保持不变)时,OWSTIMER将运行OLD功能接收器。

您可以通过重新启动OWSTIMER服务来解决此问题,但这在可能有许多Web服务器的生产服务器场环境中不可行。

任何人都知道有任何变通方法吗?

2 个答案:

答案 0 :(得分:0)

在交换功能之间做一个iisreset。

是的,关闭所有网络应用程序,但这就是为什么你计划中断/在数小时内完成。并确保在您的开发机器上正确排练该过程。

答案 1 :(得分:0)

没有变通方法,但在拥有许多服务器的生产环境中,您不应该从GAC手动GAC和非GAC的DLL。

如果您通过功能架构进行部署,SharePoint将自动处理此问题。

也就是说,如果您需要在服务器场中的多个服务器之间同步Windows服务(包括OWSTIMER和IIS)的启动/停止,那么就像编写要使用的批处理脚本一样简单:

SC \\SERVER1 STOP W3SVC
SC \\SERVER1 STOP SPTIMERV4
SC \\SERVER2 STOP W3SVC
SC \\SERVER2 STOP SPTIMERV4

然后使用以下命令重新启动:

SC \\SERVER1 START SPTIMERV4
SC \\SERVER1 START W3SVC
SC \\SERVER2 START SPTIMERV4
SC \\SERVER2 START W3SVC