Я пытаюсь понять, что мне не хватает в моем подходе, что предотвращает доступ к моей службе WCF. Если я попытаюсь получить доступ к службе через запрос AJAX из того же домена, нет проблем.
Я принял совет, который я видел в другом месте на сайте, чтобы добавить тег <httpProtocol>
в web.config, чтобы включить CORS, но он, похоже, не работает (обратите внимание на первые несколько элементы в customHeaders существуют по разным причинам безопасности):
<location path="FooBar.svc">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Request-Method" value="POST"/>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, X-Requested-With, X-Custom-Header" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
Несмотря на это, я все еще получаю сообщение об ошибке (используя IE Developer Tools) при попытке вызвать службу с отдельной страницы: "XMLHttpRequest для... требуется перекрестный поиск ресурсов (CORS)"
Мой jQuery ajax call (Post) имеет значения, установленные для использования с CORS:
crossDomain: true,
xhrFields: { withCredentials: true },
Я даже попытался добавить исправление для потенциальных проблем IE XDR, от https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js без эффекта (я использую IE11, поэтому я не ожидал этого)
У кого-нибудь есть идеи относительно того, что здесь может быть неправильным?
(EDIT: сама служба настроена с этими атрибутами, если она имеет значение:
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json)]
)
(EDIT 2: В случае, если это имеет смысл, служба должна быть частью сайта HTTPS, который использует аутентификацию по формам, - и службе необходимо использовать те же учетные данные, что и сайт. )