Jquery 正在对Sharepoint 2010中的自定义WCF服务进行身份验证

Jquery 正在对Sharepoint 2010中的自定义WCF服务进行身份验证,jquery,wcf,authentication,sharepoint-2010,active-directory,Jquery,Wcf,Authentication,Sharepoint 2010,Active Directory,我在SharePoint 2010中创建了一个自定义WCF服务,我正试图通过JQuery Ajax请求调用该服务。我的自定义WCF服务基于以下示例进行建模: 链接: 上述方法为我提供了一个WCF服务,我可以通过C#服务器端代码访问该服务,还提供了一个自定义InfoPath表单,但是,我无法使用JQuery Ajax获得响应 我在别处读到关于堆栈溢出的文章,使用MultipleBaseAddressWebServiceHostFactory而不是原始文章建议的MultipleBaseAddress

我在SharePoint 2010中创建了一个自定义WCF服务,我正试图通过JQuery Ajax请求调用该服务。我的自定义WCF服务基于以下示例进行建模:

链接:

上述方法为我提供了一个WCF服务,我可以通过C#服务器端代码访问该服务,还提供了一个自定义InfoPath表单,但是,我无法使用JQuery Ajax获得响应

我在别处读到关于堆栈溢出的文章,使用
MultipleBaseAddressWebServiceHostFactory
而不是原始文章建议的
MultipleBaseAddressBasicHttpBindingServiceHostFactory

链接:

这是有效的,允许我通过JQuery Ajax联系(但不验证)服务

a) 我不再能够导航到和查看WSDL。此问题意味着我的InfoPath表单也无法连接到该服务,因为它们查找WSDL

b) 即使JQuery Ajax请求访问自定义WCF服务,浏览器每次都会要求我进行身份验证,即使请求来自登录到SharePoint的用户的浏览器


如果有人知道如何解决问题a)和b)我将非常感激。制作一个可以从任何应用程序使用的服务真的不应该如此困难。

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

有趣的是,这似乎也解决了我的身份验证问题,尽管我不清楚为什么

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

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

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">                
    <soap:Body>
       <MethodName xmlns="http://tempuri.org/"> 
           <ParamName1>Value</ParamName1>
           <ParamName2>Value</ParamName2>
       </MethodName> 
    </soap:Body> 
 </soap:Envelope>

注意:了解methodPath的价值的最简单方法是查看服务的WSDL。

如果您找到了解决方案,请在此处提供答案。我很感兴趣。嗨,我也有同样的问题,你能添加一些关于如何创建soap消息以及如何获取“MethodPath”的细节吗?正如我在回答中所说的,看看你的WCF服务的WSDL。在
元素下查找要调用的方法。“”元素的
soapAction
属性是完整的方法路径(包括tempuri部分)。至于创建SOAP,我给出了一个完整的示例,说明它需要什么样的外观。
$.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
});