【问题标题】:Call long running operation in WSS feature OnActivated Event在 WSS 功能 OnActivated 事件中调用长时间运行的操作
【发布时间】:2010-10-21 09:12:02
【问题描述】:

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

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

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

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

SPWeb mySite = SPContext.Current.Web;

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

或者我必须从 url 重新创建 SPWeb?

这类似于这个线程:webservice oneway and new SPSite(myUrl)


更新:我已经尝试了这两种方法,但没有奏效:

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

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

【问题讨论】:

  • 所以,我们只是去掉了 oneway 属性,只是同步调用它。此时站点创建似乎没有超时,但理想情况下,我们希望异步调用它,因为我们仍然需要添加一些内容,使其运行时间更长。关于在 Windows Sharepoing Services 站点定义的 OnActivated 事件中启动长期运行的作业的任何想法或最佳实践? Web 服务是要走的路还是我应该研究计时器作业或启动另一个线程?
  • 注意:使用 OneWay 属性调用 Web 服务时,您无法使用静态 Current 属性 (HttpContext.Current) 访问 HttpContext。要访问 HttpContext,请从 WebService 派生实现 XML Web 服务方法的类,并改为访问 Context 属性 (this.Context)。单向方法不能有返回值或任何输出参数。

标签: web-services sharepoint wss wss-3.0


【解决方案1】:

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

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

当你调用webservice方法时,你不能从featurereceiver传入当前站点的url然后做 使用(SPSite 站点 = 新 SPSite(urlPassedAsParameter)) 在 web 服务方法中?

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

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 2023-03-27
    • 2015-11-14
    • 1970-01-01
    • 2011-01-10
    • 2011-11-30
    • 2018-04-28
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多