Происхождение http://localhost:1716 не разрешено Access-Control-Allow-Origin - PullRequest
4 голосов
/ 22 марта 2012

У меня есть эта ошибка

XMLHttpRequest не может загрузить http://localhost:81/Test/Service.svc/SetJSON. Происхождение http://localhost:1716 не разрешено Access-Control-Allow-Origin.

когда я вызываю веб-службу wcf с использованием jquery.

$.ajax({
    type: 'POST',
    url: webmethod,
    data: '{"data":"Darshana"}',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        alert(msg.d);
    },
    error: function (e) {
        alert("Unavailable");
    }
});

почему это?

любая помощь. спасибо ..

Ответы [ 6 ]

3 голосов
/ 22 марта 2012

По сути, поскольку вы обращаетесь к другому порту, он не находится на том же origin .

Вам необходимо включить Cross Origin Resource Sharing в службе, работающей на порту 1716.

Не зная, что вы пытаетесь сделать, такая конфигурация, как this :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

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

2 голосов
/ 22 марта 2012

Другой порт, попытка установки dataType: 'jsonp'

1 голос
/ 27 июля 2012

Я не помню, как я получил эту ошибку и когда. Но, как и многие люди, имеющие эту проблему, я решил опубликовать, что я сделал.

WCF - IService

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "SetJSON?data={data}")]
string SetJSON(string data);

WCF - Сервис

[AspNetCompatibilityRequirements(RequirementsMode = 
    AspNetCompatibilityRequirementsMode.Allowed)]
public class Service : IService
{
    public string SetJSON(string data)
    {
        return data;
    }
}

WCF - web.config

<system.serviceModel>
  <bindings>
    <webHttpBinding>
      <binding name="webHttpBindingWithJsonP"
             crossDomainScriptAccessEnabled="true" />
    </webHttpBinding>
  </bindings>
....

<services>
  <service name="RnDService.Service">
    <endpoint address="" behaviorConfiguration="webHttpBehavior"
        binding="webHttpBinding"
              bindingConfiguration="webHttpBindingWithJsonP"
        contract="RnDService.IService" />
  </service>
</services>

Jquery call

$.ajax({
    type: "GET",
    url: "http://localhost:81/Test/Service.svc/SetJSON?data=" + "{ \"dl\":" + datalist + " }",
    contentType: "application/json; charset=utf-8",
    dataType: "jsonp",
    success: function (data) {
        alert(data.toString());
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        debugger;
        alert("Error Occured!");
    }
});

не уверен на 100%, что решило мою проблему. В любом случае это кому-то поможет. :)

1 голос
/ 02 апреля 2012

Я решил это с помощью модуля Apache mod_proxy.Включите модули:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Затем добавьте:

ProxyPass /your-get-url/ http://localhost:1716/

Наконец, передайте proxy-url в ваш скрипт.

0 голосов
/ 18 апреля 2013

Если вы используете localhost: port в Angular.js, убедитесь, что вы экранировали свой номер порта следующим образом:

var Project = $resource(
       'http://localhost\\:5648/api/...',
          {'a':'b'}, 
          {
            update: { method: 'PUT' }
          }
      );

См. https://github.com/angular/angular.js/issues/1243 для получения дополнительной информации об этом.

0 голосов
/ 17 сентября 2012

Я написал сообщение в блоге (доступ к данным JSON из «локального» источника данных не разрешен) , что по сути является решением zenio, но с пошаговыми инструкциями.В Apache вы настроили обратный прокси-сервер, чтобы он перенаправлял локальный URL-адрес на порт, на котором размещены данные JSON (в основном, перенаправляя его в «удаленный» источник данных).

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