Как настроить службу WCF для вызова через междоменную AJAX

Мне сложно настроить мою службу WCF, чтобы разрешить потребление через междоменный AJAX.

Я успешно использовал эту службу на клиенте без проблем, но каждый раз, когда я пытаюсь использовать ее с помощью AJAX (через объект $ .ajax в jQuery), я получаю ошибку 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) { } }); } 

Кроме того, обратите внимание, что если вы собираетесь тестировать локально, вам нужно добавить следующее в свою веб-конфигурацию, или вы получите сообщение об ошибке 500, в котором говорится, что междоменный javascript не разрешен в аутентифицированных сервисах.

    

Вы можете удалить этот атрибут в свой web.release.config, используя xdt:transform .

Огромный крик @ 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); } 

Поскольку ваш элемент конечной точки имеет заданное значение адреса, вам необходимо добавить это в конец .svc, а затем предоставить имя метода, как в примере ниже.

Свойство crossDomainScriptAccessEnabled в элементе привязки определяет, имеет ли ваш запрос метод обратного вызова и записывает ответ обратно в stream.

ПРИМЕЧАНИЕ. Проверьте URL-адрес вашего браузера, чтобы узнать, получится ли успешный ответ как его метод WebGet