2009-02-17 5 views
3

Возможно ли выполнить межсайтовый вызов в Javascript для службы WCF?Межсайтовый вызов ajax для службы WCF

Я не против, если это POST или GET.

Но я слышал, что в эти дни браузеры не разрешают межсайтовые вызовы с помощью POST или GET.

Как я могу обойти это и по-прежнему звонить Служба WCF?

ответ

5

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

Это, как правило, используется обходным путем: используйте JavaScript, чтобы написать новую запись в DOM, которая ссылается на src, который является межсайтовым URL. Вы передадите все свои аргументы метода RPC этому «скрипту», который вернет некоторый JavaScript, который будет выполнен, сообщая вам об успехе или неудаче.

Невозможно сделать POST таким образом, URL-адрес src должен быть GET, поэтому вы можете передать аргументы таким образом. Я не уверен, что WCF имеет метод доступа только к GET. И поскольку браузер ожидает, что результат удаленного тега будет действительным объектом JavaScript, вам нужно будет убедиться, что ваша служба WCF также соблюдает это, в противном случае вы получите ошибки JavaScript.

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

Для вашего примера проксирование, скорее всего, является правильным ответом, если предположить, что WCF не имеет собственных ограничений межсайтового скриптинга.

4

Вы используете jQuery случайно? jQuery поддерживает междоменные запросы JSON с использованием «JSONP». Вы будете ограничены запросами GET, но я пробовал это, и он работает хорошо! Также очень легко работать.

Смотрите "Cross-Domain getJSON (с использованием JSONP)" раздел на этой странице детали: http://docs.jquery.com/Release:jQuery_1.2/Ajax

А вот некоторые фон на JSONP: http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

Позвольте мне знать, как она идет!

1

Чтобы расширить ответ Бена ... Я продлил нашу службу WCF для поддержки JSONP звонки с JQuery, используя код, подобный этому примеру от Microsoft:

http://msdn.microsoft.com/en-us/library/cc716898.aspx

+0

Как вам удалось это сделать? Я использовал точно такой же пример кода, но когда я попытался интегрировать его в свое приложение, я застрял с конечными точками в web.config. Я продолжал получать ошибки о отсутствующих «привязках», хотя я скопировал все привязки напротив образца. – Jonathan

2

Новые W3C рекомендаций быть стандартизированы, чтобы крест запросов между доверенными лицами через спецификацию Access Control for Cross-Site Requests.

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

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

В настоящее время очень мало браузеров поддерживают эту функцию. IE8, по-видимому, делает (я его не тестировал), и Firefox 3.1 (я тестировал это широко). Я ожидаю, что другие браузеры последуют этому примеру довольно быстро.

Вы не должны ожидать достаточного количества совместимых браузеров до 2012 года.

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

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