如何配置要通过跨域AJAX调用的WCF服务

我在配置我的WCF服务时遇到一些困难,允许通过跨域AJAX进行消费。

我已成功在客户端上使用此服务没有任何问题,但每次我尝试使用AJAX(通过jQuery中的$ .ajax对象)命中它时,我得到400错误。

这是我的web.config

                         <!---->        <!--  -->                        

这是我的经营合同。

 Namespace Contracts  Public Interface IWebAnalyticsService  Sub SendWaEvent(ByVal eventID As Integer, ByVal eventValue As String, _ ByVal cookieVisitID As String, ByVal cookieVisitorSession As String, _ ByVal HTTPXForwardedServer As String, ByVal HTTPXRewriteURL As String, _ ByVal ScriptName As String, ByVal ServerName As String) End Interface End Namespace 

我的Ajax调用非常简单,但它是:

 $.ajax({ type: 'POST', crossDomain: true, url: 'http://localhost:37490/services/webanalyticservice.svc/SendWaEvent', data: Data, //Data is a JSON wrapper I've previously constructed. contentType: 'application/javascript;charset=UTF-8' success: function(result) {DoSomething(result);}, error: HandleError }); 

[ 更新下面 ]

它总是我们忽略的东西,不是吗? 无论如何,在对上面“直截了当”的AJAX调用非常不屑一顾之后,它最终成了问题。 为了实现这一点,我不得不将我的AJAX调用更改为:

  function SendAJAX() { $.ajax({ type: "GET", url: URL, data: Data, dataType: 'jsonp', jsonpCallback: 'MyCallBack', timeout: 10000, crossDomain: true, contentType: 'application/json; charset=UTF-8', success: function (data, textStatus, jqXHR) { WriteSuccess(data, textStatus, jqXHR) }, error: function (jqXHR, textStatus, errorThrown) { WriteError(jqXHR, textStatus, errorThrown) }, complete: function (jqXHR, textStatus) { } }); } 

此外,请注意,如果您要在本地进行测试,则需要将以下内容添加到您的Web配置中,否则您将收到500错误,指出在经过身份validation的服务中不允许跨域JavaScript。

    

您可以使用xdt:transform在web.release.config中删除此属性。

向@Rajesh大声喊叫! 干得好,伙计!

您的JQuery函数需要如下所示:

 function TestingWCFRestWithJsonp() { $.ajax({ url: "http://localhost:37490/services/webanalyticservice.svc/script/SendWaEvent", dataType: "jsonp", type: "GET", timeout: 10000, jsonpCallback: "MyCallback", success: function (data, textStatus, jqXHR) { }, error: function (jqXHR, textStatus, errorThrown) { }, complete: function (jqXHR, textStatus) { } }); } function MyCallback(data) { alert(data); } 

由于您的endpoint元素具有地址值集,因此您需要将其附加到.svc的末尾,然后提供方法名称,如下面的示例所示。

绑定元素上的crossDomainScriptAccessEnabled属性标识您的请求是否指定了回调方法,并将响应写回流。

注意:从浏览器中测试URL以查看是否获得了成功的响应,因为它是一个WebGet方法