对 SharePoint 2010 中的自定义 WCF 服务进行身份验证



我在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 获得响应。

我在其他地方读到堆栈溢出使用MultipleBaseAddressWebServiceHostFactory而不是原始文章建议的MultipleBaseAddressBasicHttpBindingServiceHostFactory

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

这奏效了,允许我通过 JQuery Ajax 联系(但不进行身份验证)服务,但是,

a) 我无法再导航到 http://[servername]/_vti_bin/Service.svc/mex 并看到 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>

和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。

最新更新