Spcontext.Current应该在自定义WCF服务中为null吗?
-
22-10-2019 - |
题
这是场景:
- 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()
再次使用正确的路径。