【发布时间】:2012-09-25 04:13:51
【问题描述】:
我目前正在开发一个 TimerJob,它负责一些网站集管理。当作业运行时,它会查看一个列表以检索网站集的 URL,然后它会调用 SPSite.Exists() 来检查该网站是否仍然存在。
为了测试 TimerJob,我删除了一个网站集,但在列表中留下了相应的条目。然后我启动 TimerJob 并在调试模式下单步执行它的代码。说到检查站点是否存在SPSite.Exists()返回true。
当我为同一个网站集第二次运行 TimerJob 时,SPSite.Exists() 方法应返回 false。
所以现在我想知道为什么SPSite.Exists() 在我第一次运行作业时返回错误结果。这可能是由缓存引起的吗?
当我在 TimerJob 之外运行相同的代码时,SPSite.Exists() 每次都会返回正确的结果。
更新
所以我做了更多的调试,似乎这个问题确实是由某些缓存机制引起的,因为在删除测试网站集之后和 TimerJob 之前重新启动 Windows SharePoint Services Timer Service 时不会发生此问题开始了。
目前,除了尝试访问已删除的站点并捕获将引发的异常以确定该站点是否确实存在之外,我无法想象另一种解决方案。
更新 2
经过更多测试后,我意识到在 Timer Service 重新启动后,第一次调用 SPSite.Exists()(在 TimerJob 内)不会出现问题。第二次调用(针对不同的网站集)仍会导致已知问题。
更新 3
目前我正在使用一个丑陋的黑客来解决我的问题。当 SPSite.Exists() 返回 true 尽管它实际上不存在时,我创建了一个 SPSite 对象并尝试通过调用其 Usage 属性来引发 FileNotFoundException。当出现异常时,我知道该站点不存在。奇怪的是,在抛出异常后 SPSite.Exists() 返回正确的结果 (false)。
还有其他建议吗?
再见, 弗洛尔
【问题讨论】:
标签: sharepoint timer-jobs