2

我在 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像原始文章建议的那样使用 a 。

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

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

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

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

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

4

1 回答 1

1

经过一番折腾,我坚持使用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。

于 2012-06-08T13:50:23.467 回答