Сбой Silverlight из-за междоменной ошибки

#asp.net #silverlight #wcf #iis-7

#asp.net #silverlight #wcf #iis-7

Вопрос:

У меня есть приложение, которое создано с использованием ASP.NET , со встроенным объектом Silverlight, который взаимодействует с серверной частью WCF. Он настроен следующим образом:

Сервер 1: Хосты ASP.NET Веб-сайт на IIS7

Сервер 2: Размещает приложение WCF на IIS7

Моя машина попытается получить доступ к серверу 1 через Интернет, чтобы войти на веб-сайт. Сервер 1 будет аутентифицировать пользователя с помощью веб-службы WCF через нашу внутреннюю сеть на сервере 2. Я могу это сделать, но когда он загружает объект silverlight, он выходит из строя, жалуясь на сбой CrossDomain / ClientAccessPolicy. Поэтому, чтобы быть уверенным, я поместил эти два файла в каждую папку в inetpub / wwwroot на обоих серверах 1 и 2, просто для уверенности. Но я все еще получаю ту же ошибку.

Когда я запускаю приложение с сервера 1, оно может подключаться к сайту через свой IP-адрес локальной сети, и все это работает, оно также работает, когда я запускаю ASP.NET приложение из Visual Studio 2010 на моем собственном компьютере, со ссылками на веб-службы, указывающими на сервер 2.

Я почти нахожусь в тупике, было так много отвлекающих маневров, которые я пробовал, и ни один из них не сработал. Я даже не уверен, что это Silverlight / WCF или конфигурация IIS на каждом сервере, которая ее нарушает.

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

Спасибо, Стюарт.

Ответ №1:

одна из идей может заключаться в том, чтобы использовать fiddler и найти запрос, который запрашивает XML-запрос crossdomainpolicy. Это сбой? Проверьте адрес, на который он указывает. Я отладил свою проблему, используя это. Он указывал на корень сервера, а мой XML-файл crossdomainpolicy находился в папке проекта WCF.

Комментарии:

1. Я использую fiddler на своем собственном компьютере, чтобы видеть, какие данные отправляются, но, насколько я могу судить, он даже не запрашивает clientaccesspolicy, должен ли я запускать fiddler на сервере, на котором размещено приложение silverlight?

2. Я думаю, вы должны увидеть хотя бы один запрос для crossdomainpolicy xml или clientaccesspolicy xml. Попробуйте очистить текущие запросы в fiddler и запустить его заново.

3. Вот где я запутался, если я запущу fiddler на своей собственной машине, как он узнает, какие запросы выполняются между сервером 1 и сервером 2? Хотя, когда я пытаюсь запустить fiddler на сервере 1, он почти не показывает трафика вообще, если я не понимаю, как использовать fiddler?

4. эти запросы выполняются браузером, в котором запущено ваше приложение silverlight. Обновляется ли ваша страница (не представление silverlight, а страница браузера), если НЕТ, то все запросы выполняются между клиентским браузером и сервером 2 (на котором размещен проект WCF).

Ответ №2:

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

Какая ужасная боль!