在Sharepoint 2010中对自定义WCF服务进行身份validation

我在SharePoint 2010中创建了一个自定义WCF服务,我试图通过JQuery Ajax请求调用它。 我的自定义WCF服务是根据此处给出的示例建模的:

链接: http : //blog.sharepointbits.com/2010/04/custom-wcf-services-in-sharepoint-2010_17.html

上面的方法给了我一个可以从C#服务器端代码访问的WCF服务,以及一个自定义的InfoPath表单,但是,我无法使用JQuery Ajax获得响应。

我在Stack Overflow上的其他地方读到了使用MultipleBaseAddressWebServiceHostFactory而不是像原始文章所建议的MultipleBaseAddressBasicHttpBindingServiceHostFactory

链接: Sharepoint 2010 wcf服务。 用jquery调用方法

这工作,允许我通过JQuery Ajax联系(但不validation)服务,但是,

a)我无法再导航到http:// [servername] /_vti_bin/Service.svc/mex并查看WSDL。 此问题意味着我的InfoPath表单也无法连接到服务,因为它们寻找WSDL。

b)即使JQuery Ajax请求命中自定义WCF服务,浏览器也会每次都要求我进行身份validation,即使请求来自登录SharePoint的用户的浏览器。

如果有人知道如何解决问题a)和b)我会非常感激。 制作可以在任何应用程序中使用的服务确实不应该那么困难。

经过一番捣乱,我坚持使用MultipleBaseAddressBasicHttpBindingServiceHostFactory 。 我没有尝试通过JSON联系WCF服务,而是创建了一个SOAP消息,将其发送到WCF服务,然后解析结果。

有趣的是,这似乎也解决了我的身份validation问题,虽然我不清楚为什么。

现在,该服务可以从InfoPath和JavaScript中使用。

作为参考,从JavaScript到WCF的SOAP消息应如下所示:

    Value Value    

和JQuery发送它:

 $.ajax({ type: "POST", url: url, data: soapEnvelope, timeout: timeOut, contentType: "text/xml", dataType: "xml", beforeSend: function (xhr) { xhr.setRequestHeader("SOAPAction", 'http://tempuri.org/' + methodPath); }, success: onSuccess, error: onFailure }); 

注意:找出methodPath值应该是什么的最简单方法是查看服务的WSDL。