我已经在SharePoint中创建和部署了一个WCF服务,并且我正在使用JQuery发送请求。除了子站点之外,每件事都工作正常。

假设我有这两个服务Url:

 - http://localhost:1111/_vti_bin...../MethodName
 - http://localhost:1111/subsite/_vti_bin...../MethodName  

当我使用这两个Url时 SPContext.Current.Site 是相同的,是正确的。
但是 SPContext.Current.Web 是相同的,这是不正确的。使用第二个URL SPWeb 对象必须是子web而不是根web。

我怎样才能得到子站点作为一个 SPWeb 对象?我是否需要始终将web URL作为参数传递给WCF方法?

有帮助吗?

解决方案

经过搜索,我得出结论: SPContext.Current.Web 将始终返回 RootWeb 所以我需要特定子web的URL。

为了避免将SPWeb URL传递给我需要SPWeb对象的每个WCF方法,我可以执行以下操作:

我正在运行我的WCF服务ASP.NET comatibility模式,所以我可以使用 HttpContext 对象,我可以使用 HttpContext.Current.Request.RawUrl.此属性返回URL字符串中域名后面的所有内容。然后我可以截断此字符串以获取子web相对URL并将其传递给 OpenWeb() 方法。

例子::

在客户端,JQuery AJAX调用的URL参数是:

 http://localhost:1111/subsite/_vti_bin...../MethodName

在服务器端,如果我使用 HttpContext.Current.Request.RawUrl 我得到:

/subsite/_vti_bin...../MethodName

然后在我截断这个字符串后,我通过 /subsiteOpenWeb() 方法。

任何其他想法都非常感谢。

其他提示

我也有同样的情况。但我把网址从这里:

Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;

所以我能够创建一个SPSite对象:

using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{ 
    //your code
}
许可以下: CC-BY-SA归因
scroll top