Конфигурация IIS для разрешения междоменных запросов JSONP из файла JavaScript - PullRequest
0 голосов
/ 02 августа 2011

У меня есть файл HTML и JavaScript, настроенный для получения данных из веб-службы с поддержкой JSONP.Моя проблема заключается в том, что при развертывании файлов html и .js в каталог, где запущена служба, он будет работать нормально, но если я попытаюсь запустить файл html и .js с другого хоста, запрос не будетвеб-сервис и сценарий Java выдают ошибку сервера 500.

Я использую инструменты разработчика Chrome, чтобы увидеть вызов xmlhttprequest, и это единственная причина, по которой я знаю, что получаю ошибку 500.

Я уже провел немало исследований иобнаружил, что мне нужно установить тег метода сценария с типом ответа json и usehttpget в true, и я сделал эти две вещи, а также попытался настроить clientaccesspolicy.xml в проекте, как было упомянутоеще один пост.Все безрезультатно.

Я уверен, что это проблема конфигурации на стороне веб-службы или IIS, поскольку, когда я помещаю файлы html и javascript в каталог своего кода и запускаю веб-службу через IDE, я могу использовать этоэкземпляр html для вызова веб-службы, и я получаю свой ответ в порядке.Но если html и javascript не находятся в рабочем каталоге выполняемого кода, я получаю ошибку сервера 500.

Как это можно решить?

EDIT Я также нашел сообщение о том, что ошибка 500 основана на размере запроса, поэтому я добавил в свой web.config, но это не помогло.

1 Ответ

0 голосов
/ 02 августа 2011

Я не знаю много о конфигурации IIS, но если вы пытаетесь использовать JSONP для решения междоменной проблемы, то вы не должны видеть запрос XMLHttpRequest.JSONP работает так, что вы вводите тег сценария с URL-адресом, который вы пытаетесь вызвать:

var tag = document.createElement("script")
tag.src = "http://someurl.example.com?args=42&callback=wrapperFunction"
document.body.appendChild(tag)

Затем сервер использует аргумент строки обратного вызова для переноса своего ответа в вызов функции, например:

wrapperFunction({some: 'response', arg: 42});

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

Я прошу прощения, если это действительно проблема с конфигурацией IIS, я только что увидел XMLHttpRequest, упомянутый вместе с JSONP, и подумал: «Эй, это неправильно!».Я надеюсь, что это полезно, иначе просто не обращайте на это внимания: -)

...