IIS Express не запускается на локальном хосте с ipv6

Здравствуйте, отличные пользователи Stackru!

Вот что-то смешное, что случилось со мной - может быть, вы можете объяснить, почему?

В середине моего рабочего дня вчера моя установка IIS Express перестала работать.

Сначала я подумал, что это проблема с проектом ASP.NET, над которым я работал, просто завис и не смог запуститься, потому что страница продолжала зависать до истечения времени ожидания. Затем я попробовал некоторые другие проекты, также настроенные для работы на localhost:8080 - и они тоже не загружались - даже обычные HTML.

Теперь, когда я говорю, что они не будут загружаться; Я имею в виду никакой активности вообще. Страница будет "загружаться" в Chrome целую вечность, и консоль IISExpress не будет регистрировать какие-либо запросы GET, пока со временем вкладка в Chrome не отобразит ошибку тайм-аута.

Этим утром я (с некоторой помощью) кое-что понял - по какой-то причине, когда я пингнулся localhost адрес ipv6 ::1: вернется вместо адреса IPv4 127.0.0.1 - Я не замечал такого поведения раньше, и я не изменил сетевые настройки.

Я отредактировал свой файл HOST и включил запись для 127.0.0.1 localhost заставить ping localhost вернуть адрес ipv4. Это сработало, и когда я снова попробовал IIS Express, привязка к localhost: 8080 также сработала.

Мой вопросЧто на земле?!?!

Я понятия не имею, почему это произошло. Я знаю, что мне удалось решить эту проблему, отредактировав файл HOST, но кто-нибудь знает, с какой стати это произошло?

Любая идея, почему ping localhost вдруг начать возвращать адрес ipv6? И есть идеи, почему IIS Express не работает с ipv6? (Я предполагаю, что движок IIS уже запекся).

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

Спасибо заранее за любую информацию,

Фил

2 ответа

  • Откройте окно командной строки администратора, затем выполните это с портом, к которому вы привязываете: netsh http add urlacl url="http://[::1]:8080/" user=everyone, Это говорит вашей системе, что это круто ::1
  • открыто %USERPROFILE%\Documents\IISExpress\config\applicationhost.config найдите раздел вашего сайта и добавьте привязку IPv6: <binding protocol="http" bindingInformation="[::1]:8080:*" />

Образец:

<site name="WebSite1" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\ryan.versaw\Documents\WebSite1" /> </application> <bindings> <binding protocol="http" bindingInformation="*:8080:localhost" /> <binding protocol="http" bindingInformation="[::1]:8080:*" /> </bindings> </site>

Пока в вашей системе включен IPv6,::1 и 127.0.0.0 являются допустимыми адресами для localhost. То, что из этих двух возвращается системой и используется, например, для эхо-запросов, является более или менее недетерминированным, если только программа не запрашивает адрес IPv4 или IPv6 - и поскольку эхо-запрос Windows может обрабатывать любой из них, вероятно, он этого не делал.

Что касается IIS, ответы, подобные этому, предполагают, что это поведение специально, и вам нужно включить привязку к IPv6-адресу отдельно: https://serverfault.com/questions/123796/get-iis-7-5-to-listen-on-ipv6

Другие вопросы по тегам