Как избежать междоменной политики в jquery ajax для использования службы wcf? - PullRequest
7 голосов
/ 16 апреля 2011

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

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

Ответы [ 3 ]

5 голосов
/ 16 апреля 2011

Если вы хотите кросс-доменные вызовы из 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 голосов
/ 19 мая 2011

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

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

в моих звонках

2 голосов
/ 20 апреля 2011

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

Что я пока не понимаю, так это почему при использовании атрибута [ScriptMethod (ResponseFormat = ResponseFormat.Json)] в службе WCF (.NET4), вызов успешно выполняется без настройки междомена (для web.config и $ .ajax), а при использовании атрибута [WebGet (ResponseFormat = WebMessageFormat.Json)] требуетсянастройки междомена в вызовах webconfig и $ .ajax.Если я использую атрибут WebGet без настроек междомена, я получу ошибку «Метод не разрешен».

Используется код 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;
}

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...