как избежать перекрестной политики домена в jQuery ajax для использования службы wcf?
Какие шаги мне нужно сделать в web.config для междоменной политики?
как избежать перекрестной политики домена в jQuery ajax для использования службы wcf?
Какие шаги мне нужно сделать в web.config для междоменной политики?
Если вам нужны перекрестные вызовы из 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 проверьте, например, в этой статье.
Я получил его для работы с использованием параметра 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;
}
любые идеи?
chrome/firefox не позволял мне делать это, пока я явно не установил
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
в моих вызовах