Кросс-домен jQuery Ajax-запрос и WCF REST-сервис

Я вызываю (Ajax Request) службу REST WCF, и запрос является междоменным запросом.

Если я разверну свой сервис в том же домене, все будет работать как крем. В конце концов, сервис будет находиться в другом домене.

Я использую JQuery 1.5.2. Мой сервис возвращает мне сообщение об ошибке:

<code>errorThrown: "jQuery15208493315000087023_1334089616458 was not called"
textStatus: "parsererror"
</code>

Хотя в Firefox я вижу значения JSON, но выполнение падает на обработчик ошибок Ajax-запроса.

Мой запрос Ajax:

<code>function CallService() {
    $.ajax({
        type: "GET", 
        url: "http://SomeService/EmpService.svc/GetValues?dv=1455",
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp", 
        processdata: false,            
        success: function (data) {
            ServiceSucceeded(data);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            debugger;
            alert("Service Error");
            ServiceFailed(jqXHR, textStatus, errorThrown);
        }
    });
}
</code>

На стороне службы WCF я настроил CrossDomainScriptAccess на true:

<code><webHttpBinding>
  <binding name="webHttpBindingWithJsonP"
           crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</code>

Ответ JSON, который я получаю от сервера:

<code>[{"Message": "Stop On Duty", "MessageTime": "\/Date(1334068773893-0500)\/"},
 {"Message": "Start On Duty", "MessageTime": "\/Date(1334068763540-0500)\/"},
 {"Message": "App_testing_4102012924am", "MessageTime": "\/Date(1334068533627-0500)\/"},
 {"Message": "Kunal_testing_4102012924am", "MessageTime": "\/Date(1334067945510-0500)\/"},
 {"Message": "Alert: Door Open", "MessageTime": "\/Date(1334066280963-0500)\/"}]
</code>

Я что-то здесь упускаю в настройках. Весь код работает нормально, если служба перемещена в тот же домен.

Я посмотрел на подобный пост, но не смог сделать эту работу.

 Kunal Uppal11 апр. 2012 г., 15:36
да, это уже есть в корне
 Chandermani11 апр. 2012 г., 08:40
Я надеюсь, что вы также добавили файл кросс-доменной политики, проверьте здесьmsdn.microsoft.com/en-us/library/cc197955%28v=vs.95%29.aspx

Ответы на вопрос(3)

Мне нужно было также добавить<webHttpEndpoint> чтобы заставить его работать:

<standardEndpoints>
    <webHttpEndpoint>
        <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint>
    </webHttpEndpoint>
    <webScriptEndpoint>
         <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint>
    </webScriptEndpoint>
</standardEndpoints>

<bindings>
    <webHttpBinding>
        <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
    </webHttpBinding>
</bindings>
 11 окт. 2016 г., 21:28
Я ценю ваше чистое форматирование
 [OperationContract]
    [WebGet( ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, RequestFormat=WebMessageFormat.Json,
    UriTemplate = "GetEmployeeJson")]
     List<EmployeeData> GetEmployeeJson();

Web.config

  <bindings>
      <webHttpBinding>
          <binding name="webHttpBindingWithJsonP"
                   crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
  </bindings>
  <behaviors>
      <serviceBehaviors>
          <behavior name="WcfExample.Service1Behavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
          </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
          <behavior name="WebBehavior">
              <webHttp/>
          </behavior>
      </endpointBehaviors>
  </behaviors>
  <services>
      <service behaviorConfiguration="WcfExample.Service1Behavior" name="WcfExample.Service1">
          <endpoint address="" binding="webHttpBinding" contract="WcfExample.IService1" bindingConfiguration="webHttpBindingWithJsonP" behaviorConfiguration="WebBehavior" />
      </service>
  </services>

JQuery AJAX вызов службы wcf

  $.ajax({
            type: "GET",
            contentType: "application/javascript",
            crossDomain: true,
            dataType: 'jsonp',
            cache: true,
            url: 'http://localhost:49349/Service1.svc/GetEmployeeJson',
            success: function (data) {
                var html = [];

                alert(data[0].lastname);


                $.each(data, function (index, value) {
                    $("#TableID").append("<tr><td>" + value.HREmpId + "</td><td>" + value.firstName + "</td><td>" + value.lastname + "</td><td>" + value.address + "</td><td>" + value.city + "</td></tr>");

                });


            },

            error: function (xhr, ajaxOptions, thrownError) {
                alert("here error");
                alert(thrownError);
                if (xhr != null) {

                    var err = JSON.parse(xhr.responseText); //you can throw a code-behinde Exception and it will automatically                                                 //render to a valid JSON string when we rerieve the responseText
                    alert("ErrorMessage: " + err.Message + " StackTrace: " + err.StackTrace);

                }
            }
        });
Решение Вопроса

Ну разобрался сам. Решение состояло в том, чтобы изменить файл конфигурации, содержащий информацию о сервисе

Я добавил стандартную конечную точку и привязку в файле конфигурации

<standardEndpoints>
      <webScriptEndpoint>
       <standardEndpoint crossDomainScriptAccessEnabled="true">
       </standardEndpoint>
      </webScriptEndpoint>
      </standardEndpoints>



  <bindings>

  <webHttpBinding>
    <binding name="webHttpBindingWithJsonP"
             crossDomainScriptAccessEnabled="true" />
  </webHttpBinding> 
 15 янв. 2016 г., 14:36
@ matthew_360 в разделе & lt; system.serviceModel & gt; тег, который находится в родительской & lt; конфигурации & gt; тег
 18 янв. 2013 г., 23:38
в какой раздел вашего web.config вы добавили это?
 22 мар. 2017 г., 12:17
Как мы можем также указать конкретные домены в конфигурации, чтобы разрешить & quot; Cross Domain & quot; доступ?

Ваш ответ на вопрос