SPSite 构造函数 ( new SPSite(mySiteId)
) 返回一个缓存条目,即使该站点不再存在。我怎样才能防止这种情况?
3 回答
我们遇到了同样的问题,还没有找到解决方案。我们尝试通过调用静态 SPSite.Exists(..) 方法来检查 SPSite 是否存在。对于不再存在的站点,该方法也返回 true。
但是我们找到了一些解决方法。我们尝试通过调用 SPSite 的 Usage 属性来引发 FileNotFoundException。当出现异常时,我们知道该站点不再存在。
捕获异常后,您可以再次调用 SPSite.Exists() 方法,该方法现在将返回 false。
也许有点晚了,但因为我遇到了同样的问题。
您可以在 SPSite 类上调用 satic 方法 InvalidateCacheEntry(Uri uri, Guid siteId)。通过传递一个空的 guid 和您正在使用的 SPSite 的 uri,您应该能够清除缓存并获取当前值。
请注意,这似乎也是 SPSite.Exists 为刚刚删除的站点返回“true”问题的原因。通过使用 InvalidateCacheEntry 方法,我能够检测到站点的正确状态(已删除或存在)。我不知道这种解决方法的性能成本是多少,但是如果您将来遇到类似问题,请考虑一下。
虽然我不知道 Sharepoint 的详细信息,但我可以告诉你调用new
将永远不会返回缓存的对象。它总是一个新分配的对象,尽管内部可能指向缓存的对象。