1

我实际上已经解决了这个问题,但我发现解决方案很奇怪,所以至少可以这么说。如果发现我得到了哦,太好了

“错误:在 TrackedRequests 中找不到请求。我们可能正在不同线程上创建和关闭网站”

大多数 SharePoint 开发人员都非常熟悉。在这种情况下,它适用于工作流程。我设法解决了它,但这对我来说有点令人费解。在做了一些试验和错误之后,这显然解决了它。

以前的代码:

SPWeb = workflowPriperties.Site.RootWeb;

当前代码:

Guid siteId = workflowProperties.Site.ID;

using (SPSite site = new SPSite(siteId))
{
  using (SPWeb web = site.OpenWeb(site.RootWeb.ID))
  {
    //Do Something
  }
}

这解决了我的特定方法带来的问题。虽然现在我收到一条错误消息,现在似乎不是来自我自己的自定义代码(我仍然不知道为什么),但我很困惑,因为我的印象是创建的 workflowProperties 对象,如下所示:

public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties workflowProperties = new Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();

都类似于从 SPContext 获取它们,这意味着它们不必被处置或关闭。这是否意味着 SPWorkflowActivationProperties 对象的某些属性实际上是 SPRequest 对象的新实例或派生自新的 SPRequest 对象?

我希望我的问题看起来并不过分愚蠢,如果以前有人问过这个问题。请慷慨地指出我回答这个问题的线程。

谢谢。

4

1 回答 1

0

好的,我不是关于工作流属性问题,但是我找到了错误。

问题是因为这段代码

public void readusersFromItems(SPListItem item)
{
 Guid siteid = item.Web.Site.ID;
 Guid webId = item.ParentList.ParentWeb.ID;

从工作流属性中获取基于 SPListItem 对象的 Guid 并将其传递给库类似乎会导致在给您 ID 之前实例化站点和 Web 对象的问题。这种行为只是我的猜测,因为当我将 Guid 直接传递给方法时,它解决了问题。

要点是始终将 SPWeb 和 SPSite Guid 传递到库类中工作流之外的方法中,因为从 SPListItem 对象派生它们将导致难以跟踪的错误。

于 2010-12-16T10:35:55.927 回答