У нас есть две HTML-страницы, которые используют два вызова WCF. Оба метода WCF находятся в одном проекте, а при развертывании - в http://MyServer:89
. У нас не было проблем с CORS, поскольку web.config
имеет следующее:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept"/>
</customHeaders>
[OperationContract]
выглядит следующим образом:
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest,
UriTemplate = "GetData")]
System.IO.Stream GetData();
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest,
UriTemplate = "GetMoreData")]
System.IO.Stream GetMoreData();
Обе HTML-страницы также находятся в одном и том жесервер, но другой порт (http://MyServer:93
).
GetData()
вызывается HTML-кодом с элементами управления JavaScript AM Charts. Вызов выглядит примерно так, и в последние несколько месяцев он прекрасно работает:
"dataLoader": {
"url": "http://MyServer:89/Service1.svc/GetData",
Только сегодня я создал GetMoreData()
для другой HTML-страницы. Вызов функции выглядит следующим образом:
var serviceUri = "http://MyServer:89/Service1.svc/GetMoreData";
$.ajax({
type: "GET",
contentType: "application/json",
url: serviceUri,
dataType: "json",
success:
function (response) {
showPresidentsList(response);
$('#message').html("<a href=" + serviceUri + ">" + serviceUri + "</a>");
},
error:
function (err) {
alert(err);
}
});
Этот второй вызов вызвал у меня проблемы с CORS, в частности следующую ошибку:
Access to XMLHttpRequest at
'http://MyServer:89/Service1.svc/GetMoreData' from origin
'http://MyServer:93' has been blocked by CORS policy: Response to preflight
request doesn't pass access control check: It does not have HTTP ok status.
Решением было добавить подстановочный знак для веб-вызоваметод, а не просто GET
:
[OperationContract]
[WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest,
UriTemplate = "GetMoreData")]
System.IO.Stream GetMoreData();
Мой вопрос: почему у одного возникает эта проблема с CORS, а у другой нет, поскольку они оба имеют один и тот же IP: порт?