Сводные данные и изолированное хранилище в Silverlight - Междоменные запросы веб-каналов
ОГЛАВЛЕНИЕ
Междоменные запросы веб-каналов
Запросы на сбор веб-каналов представляют собой веб-запросы по протоколу HTTP, которые обычно выполняют запросы к другому веб-домену. Любой веб-запрос приложения Silverlight, при котором происходит обращение к другому домену, отличному от домена, в котором находится приложение Silverlight, должен соответствовать междоменной политике удаленного домена. Схема на рис. 5 показывает это наглядно.
Рис. 5 Междоменный запрос веб-канала
Для получения дополнительных сведений см. статью «Точки данных» из сентябрьского номера за 2008 г.. В этой статье обсуждаются форматы файлов и принципы работы политик.
При выполнении веб-запроса между доменами приложение Silverlight перед выполнением запроса запрашивает файл сведений о междоменной политике у удаленного веб-сервера. Сначала приложение Silverlight выполняет поиск файла clientaccesspolicy.xml (файл междоменной политики Silverlight) и, если он не найден, выполняет поиск файла crossdomain.xml (файл междоменной политики Flash). Если ни один из этих файлов не найден, запрос признается неудачным и возникает ошибка. Эта ошибка принимается обработчиком событий DownloadStringCompleted и передатся пользователю, если это необходимо.
Например, если ввести в приложение-образец Uri-адрес http://johnpapa.net/feed/default.aspx, Silverlight сначала будет искать его в файлах междоменной политики по адресу johnpapa.net корневой папки веб-сервера. Если не найден ни один из файлов, приложению возвращается ошибка, при этом, если требуется, оно может его уведомлять об этом пользователя. На рис. 6 показан подключаемый модуль FireBug, который отслеживает все запросы обозревателя. При этом он показывает, что обозревателем ведется поиск файлов междоменной политики, что он неудачен и что запрос веб-канала RSS не выполняется.
Рис. 6 Отладка междоменных запросов потока
FireBug – прекрасное средство отслеживания запросов HTTP для обозревателей Firefox, а Web Development Helper – столь же полезный инструмент в сочетании с Internet Explorer. Еще одним вариантом может стать использование программы Fiddler2, которая представляет собой отдельное приложение, выполняющее отслеживание всего трафика на компьютере.
Одним из решений этой задачи может быть размещение файла clientaccesspolicy.xml в корне веб-сервера администратором веб-канала. Это может быть невозможно, поскольку, скорее всего, у вас нет доступа к удаленному веб-серверу, и вам не известно, у кого он может быть. Другой вариант – проверить, использует ли веб-канал промежуточные службы, например Yahoo Pipes. Например, главный веб-канал от адреса johnpapa.net может быть извлечен через службу Yahoo Pipes при помощи http://pipes.yahooapis.com/pipes/pipe.run?_id=057559bac7aad6640bc17529f3421db0&_render=rss. Поскольку файл междоменной политики, который находится по адресу http://pipes.yahooapis.com/clientaccesspolicy.xml, допускает открытый доступ, это хороший вариант.
Третий вариант – использование службы, например Popfly или FeedBurner, для объединения веб-каналов, ретранслируя и через службу, также имеющую открытую междоменную политику. И, наконец, четвертый вариант – написать свою собственную веб-службу, собирающую веб-каналы, а затем ретранслирующую их приложению Silverlight. Самым простым решением будет использование такой службы, как Popfly или Yahoo Pipes.