【发布时间】: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