Как избежать перекрестной политики домена в jQuery ajax для использования службы wcf?

как избежать перекрестной политики домена в jQuery ajax для использования службы wcf?

Какие шаги мне нужно сделать в web.config для междоменной политики?

Ответ 1

Если вам нужны перекрестные вызовы из javascript в WCF, вы должны использовать JSONP. Чтобы добавить поддержку JSONP в WCF, вы должны определить ее в WebHttpBinding. Конфигурация должна выглядеть так:

<bindings>
  <webHttpBinding>
    <binding name="crossDomain" crossDomainScriptAccessEnabled="true" />
  </webHttpBinding>
</binding>
<behaviors>
  <endpointBehavior>
    <behavior name="restBehavior">
      <webHttp />
    </behavior>
  </endpointBehavior>
</behaviors>
<services>
  <service name="...">
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="crossDomain"
              contract="..." behaviorConfigurations="restBehavior" /> 
  </service>
</services>

Для части jQuery проверьте, например, в этой статье.

Ответ 2

Я получил его для работы с использованием параметра JQuery (1.5.1) $.ajax CrossDomain, установленного в true.

То, что я еще не понимаю, это то, что при использовании атрибута [ScriptMethod (ResponseFormat = ResponseFormat.Json)] в службе WCF (.NET4) вызов выполняется без настройки crossdomain (to web.config и $.ajax), и при использовании атрибута [WebGet (ResponseFormat = WebMessageFormat.Json)] для него требуются настройки crossdomain в webconfig и $.ajax call. Если я использую атрибут WebGet без настроек crossdomain, я получу ошибку "Не разрешен метод".

Используется код WCF:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)] // requires crossdomain settings 
//[ScriptMethod(ResponseFormat = ResponseFormat.Json)] // no crossdomain settings required
public string GetNumber(string id)
{
    return "query response on id: " + id;
}

любые идеи?

Ответ 3

chrome/firefox не позволял мне делать это, пока я явно не установил

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

в моих вызовах