在WSS功能OnActivated Event中调用长时间运行的操作

时间:2009-04-23 14:15:06

标签: web-services sharepoint wss wss-3.0

更具体地说 - 如何使用 [SoapDocumentMethod(OneWay = true)] 在Web服务中引用SPContext?

我们正在创建一个在创建网站时需要运行作业的功能。这项工作大约需要4分钟才能完成。因此,我们制作了一个Web服务,我们可以在激活该功能时调用它。这有效,但我们希望它现在异步运行。我们已经找到了SoapDocumentMethod的OneWay属性,但它的工作效果非常好,但SPContext现在为NULL。

我们在_vti_bin虚拟目录中有我们的Web服务,因此它可以在每个Windows Sharepoint Services站点中使用。我正在使用SPContext.Current.Web来获取站点并执行长时间运行的操作。我想通过立即返回肥皂响应并让流程运行来解雇并忘记它。

如何获取当前的SPContext?我曾经能够在我的网络服务中做到这一点:

SPWeb mySite = SPContext.Current.Web;

当我将 [SoapDocumentMethod(OneWay = true)] 属性应用于我的网络服务时,是否可以获得相同的上下文?

或者我必须从网址重新创建SPWeb吗?

这与此主题类似:webservice oneway and new SPSite(myUrl)


更新:我尝试了这两种方法,但它们不起作用:

SPWeb targetSite = SPControl.GetContextWeb(this.Context);

SPWeb targetSite2 = SPContext.GetContext(this.Context).Web;

1 个答案:

答案 0 :(得分:0)

  

单向方法不能有返回值或任何输出参数

但他们确实有参数,不是吗?

当您调用webservice方法时,无法从featurereceiver传入当前站点的url然后执行 使用(SPSite site = new SPSite(urlPassedAsParameter)) 在Web服务方法?

FeatureActivated覆盖中的SPFeatureReceiverProperties将当前SPWeb或SPSite作为SPFeatureReceiverProperties.Parent。