Странное поведение с IP-адресами веб-роли Azure в IIS - PullRequest
3 голосов
/ 04 августа 2011

Контрольный пример:

  • Создан новый облачный проект со стандартным шаблоном веб-сайта asp.net.
  • Развернуто.

Конфигурация по умолчанию определяетконечная точка на порту 80 без заголовков хоста.

Я бы подумал, что это приводит к привязке

*:80:

Однако фактически создается привязка:

10.211.196.111:80:

Где 10.211.196.111 - это IP-адрес экземпляра веб-роли.

Если мы посмотрим на доступные IP-адреса на машине, у нас будет 2:

  1. 10.211.196.111
  2. 2001: 0: 4137: 9e76: c8c: 387d: f52c: 3b90

Что интересно, если мы изменим наш IISпривязка для прослушивания на всех IP-адресах *:80 веб-сайт фактически перестает работать.Вместо этого мы получаем ошибку 503 - Service unavailable.

Почему это важно для меня?Мы недавно использовали Azure Accelerator для веб-ролей и обнаружили, что он не работает, если вы не укажете имя хоста.Причина, как объяснено выше, заключается в том, что оно будет интерпретировать пустое имя хоста как *.80, что, конечно, приводит к ошибке 503.

Итак, первый вопрос - может ли кто-нибудь объяснить это поведение (зачем слушатьвсе IP-адреса не работают) и для чего используется этот второй IP-адрес?

Так как мне кажется, что мне нужно исправить лазурный ускоритель, чтобы он использовал определенный IP-адрес экземпляра, что рекомендуетсяспособ найти это?Как вы думаете, безопасно ли искать адаптер, начинающийся с Microsoft Virtual Machine Bus Network Adapter или, возможно, с определенной подсети?

Спасибо,
Ben

1 Ответ

3 голосов
/ 04 августа 2011

Я считаю, что другой IP-адрес предназначен для второго сетевого адаптера в виртуальной машине, который используется для внутренней связи между виртуальными машинами и контроллером фабрики.Возможно, у вас нет разрешения на привязку к этому другому адресу (поэтому сопоставление «все неназначенные IP-адреса» не работает).

Однако я не совсем уверен в этом.Если (как я полагаю, вы говорите) Windows Azure Accelerator для веб-ролей связывает все с *: 80: hostname , это выглядит как свидетельство того, что вы можете выполнять такие привязки.

В любом случае, чтобы получить IP-адрес, вам просто нужно использовать RoleEnvironment.CurrentRoleInstance.Endpoints [" name "]. IPEndpoint.Я думаю, что для name вам понадобится HttpIn для ускорителя.Вы можете попробовать использовать этот IP-адрес вместо «*» в этом коде и посмотреть, поможет ли это, но учтите, что сам интерфейс управления имеет подстановочное отображение, так что вы, скорее всего, столкнетесь с каким-либо конфликтом (и не сможете его создать).другие изменения управления), если вы также не измените пользовательский интерфейс управления для прослушивания определенного имени хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...