Я делаю запрос GET
к веб-сервису WCF. Моя служба WCF находится в http://localhost/RestService/RestService.svc/web/GetMessage
и имеет следующий интерфейс:jQuery GET сбой без сообщения об ошибке
[OperationContract]
[WebGet(UriTemplate = "GetMessage", ResponseFormat = WebMessageFormat.Json)]
String GetMessage();
Конечный настроен должным образом, как я могу сделать голый вызов в течение моего браузера:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="WebServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WebEndpointBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="TestRestService.RestService"
behaviorConfiguration="WebServiceBehavior">
<endpoint name="RestWeb"
address="web"
binding="webHttpBinding"
behaviorConfiguration="WebEndpointBehavior"
contract="TestRestService.IRestService" />
</service>
</services>
</system.serviceModel>
Calling его с помощью навигации в браузере возвращается:
{"GetMessageResult":"Hello World!"}
Пока все хорошо. Здесь нет проблем. Быстрый взгляд на jQuery documentation для выполнения GET
выходов:
<html>
<head>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$.ajax({
url: 'http://localhost/RestService/RestService.svc/web/GetMessage',
type: 'GET',
dataType: 'json',
success: function (data) {
alert(data);
},
error: function (xhr, status, message) {
alert("Error: " + status + " " + message); }
});
</script>
</head>
<body>
</body>
</html>
я запускаю это в небольшой тестовой странице HTML с помощью JQuery 1,72, и я получаю следующее сообщение об ошибке:
Error: error
Что дает? Обработчик сообщения об ошибке that I found here дает мне абсолютно нулевой полезная информация. Проще говоря:
- Почему мой отказ GET?
- Почему сообщение об ошибке бесполезно?
Решение
Как выясняется, JQuery изначально не поддерживает запросы Ajax междоменные, как Кевин B suggested in his answer. Чтобы исправить это, я должен был переключиться на использование dataType: 'jsonp'
и добавить webHttpBinding
с crossDomainScriptEnabled
собственности позволила:
<bindings>
<webHttpBinding>
<binding name="WebBindingWithScripts"
crossDomainScriptAccessEnabled="true">
<security mode="None" />
</binding>
</webHttpBinding>
</bindings>
<endpoint name="RestWeb"
address="web"
binding="webHttpBinding"
behaviorConfiguration="WebEndpointBEhavior"
bindingConfiguration="WebBindingWithScripts"
contract="TestService.IRestService">
</endpoint>
При использовании только dataType: 'jsonp'
, вы все равно получите ошибки, если не настроить службу WCF, чтобы скрипты Междоменных.
Попробуйте с помощью Devtool браузера (для хром ctrl + shift + J). Вы видите, что запрос идет? Любые ошибки на консоли? – SuperSaiyan
Попробуйте удалить 'dataType' и дайте jquery сделать это. Вы также можете попробовать установить 'dataType: 'jsonp''. –
Вы уверены, что веб-служба возвращает MIME-тип json/application? – Ian