clientaccesspolicy.xml не запрашивается первый раз в некоторых браузерах - PullRequest
7 голосов
/ 21 октября 2011

Я сталкиваюсь со странной проблемой, связанной с междоменным вызовом веб-службы в Silverlight 4.

Сразу после запуска приложение вызывает веб-службу на том же хосте, откуда оно было загружено, но на другом порту.(Например, приложение находится на http://www.mydomain.com:80, а веб-сервис на http://www.mydomain.com:81). SSL не задействован. Хост предоставляет правильный файл clientaccesspolicy.xml и все работает правильно большую часть времени (например, 99,9%).

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

В типичном случае это последовательность запросов, которую вы видите с помощью инструментов разработчика Fiddler или Chrome:

  • index.html (страница, на которой размещено приложение silverlight)
  • silverlight.js
  • application.xap
  • clientaccesspolicy.xml (запрошено и загружено правильно)
  • вызов веб-службы

Однако в некоторых случаях вы видите только

  • index.html (страница, на которой размещено приложение silverlight)
  • silverlight.js
  • application.xap
  • -> междоменная ошибка (не запрашивается клиентская политика, не требуется вызов веб-службы).

Это происходит только на меньшинстве компьютеров (на всех запущенных Windows 7), если выполняются все эти условия:

  • приложение, работающее в Chrome, Firefox или вне браузера (IE всегда работает)
  • это при первой загрузке страницы (т.е. если вы нажмете кнопку перезагрузки браузера, проблема исчезнет.Закройте / перезапустите браузер, и в первый раз у вас все еще будет проблема)
  • не работает Fiddler (если вы запускаете трафик через Fiddler, проблема исчезает).Инструменты разработчика Chrome, однако, не действуют.
  • машина находится в том же домене, что и сервер приложений 1055 .Если вы обращаетесь к странице из внешней сети (с той же машины), проблема не существует.

На этих машинах при таких обстоятельствах проблема воспроизводима на 100%.

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

1 Ответ

11 голосов
/ 07 декабря 2011

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

В качестве меры безопасности Silverlight блокирует любые междоменные вызовы между зоной Интернета иЛокальная Интранет-зона .В этом случае он даже не запрашивает clientaccesspolicy.xml.Поэтому, если приложение размещено на сайте www.myhost.com (зона Интернета), Silverlight запрещает ему вызывать веб-службу на сайте www.another.com (зона локальной интрасети).

Это сообщение в блоге объясняет это подробно.

Итак, если у вас есть один или несколько из следующих симптомов (несмотря на то, что вы исключили очевидные ошибки междоменных доменов, такие как искаженный или неуместный клиентский доступccesspolicy.xml):

  • междоменная ошибка некоторых явно случайных машин (несколько разных мест / доменов), но работающих с других машин
  • clientaccesspolicy.xml вообще не запрашивается
  • работает с некоторыми браузерами, не с другими.Кажется случайным, иногда не работает ни с одним браузером.
  • иногда без проблем, когда Fiddler открыт, но ошибка без запуска Fiddler
  • все работает правильно на localhost

ItМожет быть, стоит попробовать следующее, чтобы поместить хост приложения и веб-службу в одну зону безопасности:

  • перейдите в настройки безопасности IE (эти настройки также используются любым приложением, которое обращается ксеть, т. е. любой другой браузер)
  • добавьте адрес, на котором размещено приложение, и адрес, на котором размещается веб-сервис, на сайты Local Intranet ИЛИ
  • снимите флажокФлаг «Автоматически определять сеть интрасети» (чтобы они оба оказались в зоне Интернета )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...