这是场景:

  • SharePoint 2010中部署的自定义WCF服务
  • 站点使用基于索赔的身份验证(FBA,NTLM)
  • .SVC部署到Hive中的ISAPI
  • 服务是使用自定义服务工厂配置的
  • 使用AJAX从浏览器调用服务
  • 我能够很好地完成服务;服务已开始并接受请求

这是问题:spcontext.current是 总是 无效的。我知道有各种各样的技术来“假” spcontext或显然可以手动创建spsite和spweb,但是 应该 spcontext.current在自定义WCF服务中为null 使用基于索赔的身份验证?还是我错过了某个地方?

我从来没有使用经典模式身份验证遇到这个问题,所以我想知道这是否只是WCF+SharePoint+基于索赔的身份验证以及是否有可能解决的方法。

感谢您的任何见解!

- 查克

有帮助吗?

解决方案

arrrrgh!终于在弄乱了这一天的一天之后就弄清楚了。

我想离开这里,以防万一其他人遇到同样的问题。

当我注册JavaScript端点时,我使用服务的完整URL。

因此,如果我的网站的根源是:

http://mydomain.com/sites/site1

我注册为:

http://mydomain.com/sites/site1/_vti_bin/myservicedir/myservice.svc/js

这一切都很好。当提出要检索JavaScript存根的请求时,我可以在提琴手中看到该请求转到:

/sites/site1/_vti_bin/myservicedir/myservice.svc/js

但是,我才刚刚注意到(最后,盯着它几个小时了..........),当我打电话给服务方法时,URL被切碎到:

/_vti_bin/myservicedir/myservice.svc/MethodName

所以我的 SPContext 总是 null 由于URL中没有指定的站点上下文。

查看SharePoint的JavaScript存根,我可以看到 set_path() 正在使用切碎的URL。简单地通过打电话来解决 set_path() 再次使用正确的路径。

许可以下: CC-BY-SA归因
scroll top