Статьи

Обходной путь для IIS Express Crashing

Я столкнулся с этой странной проблемой при разработке очень простой веб-роли облачной службы Windows Azure с использованием Windows Azure SDK 1.8 . Я начал с базовой веб-роли ASP.Net MVC 4 без каких-либо изменений. Когда я попытался отладить его с одним запущенным экземпляром, все работало отлично. В тот момент, когда я увеличил количество экземпляров до 2 (или более 1) и попытался отладить его, IIS Express аварийно завершил работу со следующими записями в журналах событий:


Faulting имени приложения: iisexpress.exe, версия: 8.0.8418.0, штамп времени: 0x4fbae3d6
Сбойного имя модуля: ntdll.dll, версия: 6.2.9200.16420, штамп времени: 0x505ab405
Код исключения: 0xc0000008
Fault смещения: 0x0000000000004c39
Faulting идентификатор процесса: 0x54bc
Сбойного время запуска приложения: 0x01cdfeb70c1e060e Неверный
путь к приложению: C: \ Program Files \ IIS Express \ iisexpress.exe Плохой
путь к модулю: C: \ Windows \ SYSTEM32 \ ntdll.dll
Идентификатор отчета: 4a8f54b2-6aaa-11e2-be81-9cb70d025a13
Полный сбойный пакет name:
ошибочный идентификатор приложения, относящийся к пакету:


Поле ошибки 79240842, тип 4
Имя события: APPCRASH
Ответ: не доступно
Идентификатор кабины: 0

Подпись проблемы:
P1: iisexpress.exe
P2: 8.0.8418.0
P3: 4fbae3d6
P4: ntdll.dll
P5: 6.2.9200.16420
P6: 505ab405
P7: c0000008
P8: 0000000000004c39
P9:
P10:

Прикрепленные файлы:
C: \ Users \ Gaurav.Mantri \ AppData \ Local \ Temp \ WER4720.tmp.WERInternalMetadata.xml

Эти файлы могут быть доступны здесь:
C: \ ProgramData \ Microsoft \ Windows \ WER \ ReportArchive \ AppCrash_iisexpress.exe_1263888cd189f3357758cdc998d7afecf3f28_2dae4eb2

Символ анализа:
перепроверка для решения: 0
Идентификатор отчета: 4a8f54b2-6aaa-11e2-be81-9cb70d025a13
Статус отчета: 17
Хешированное ведро: b615b24f7933990317ae65713d680dab


Эта проблема возникает не на всех машинах . Я попросил нескольких моих друзей попробовать свои компьютеры, и некоторые из них смогли воссоздать эту проблему, в то время как другие не смогли. Моей средой разработки были Windows 8 , Visual Studio 2012 и Windows Azure SDK 1.8 .

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

Команда разработчиков Windows Azure помогла мне найти причину проблемы и дала мне обходной путь, который устранил проблему. Мне также сообщили, что эта проблема будет исправлена ​​в следующих версиях SDK, но до того момента, когда выйдет новый SDK, для решения этой проблемы можно использовать решение, рекомендованное группой.

причина

Из того, что мне сказали, это связано с проблемой Windows Azure SDK 1.8, и это происходит потому, что IIS Express пытается привязать один и тот же IP-адрес к нескольким экземплярам . Вот записи из файла applicationHost.config для двух экземпляров, в которых я пытался запустить свое приложение, что позволило команде разработчиков прийти к такому выводу:

Экземпляр 0:

<site name="deployment18(110).WindowsAzureService3.WindowsAzureService3WebRole_IN_0_Web" id="1273337584">
                <application path="/" applicationPool="b31dc554-ad4b-4a18-8a62-098b5079f26d" enabledProtocols="http">
                    <virtualDirectory path="/" physicalPath="D:\Projects\WindowsAzureService3\WindowsAzureService3WebRole\" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:82:" />
                </bindings>
                <logFile logExtFileFlags="Date, Time, ClientIP, UserName, SiteName, ComputerName, ServerIP, Method, UriStem, UriQuery, HttpStatus, Win32Status, BytesSent, BytesRecv, TimeTaken, ServerPort, UserAgent, Cookie, Referer, ProtocolVersion, Host, HttpSubStatus" logFormat="W3C" directory="C:\Users\Gaurav.Mantri\AppData\Local\dftmp\Resources\40fae03f-8519-4c66-a36b-da8e2de73e9d\directory\DiagnosticStore\LogFiles\Web" period="Hourly" />
                <traceFailedRequestsLogging enabled="true" directory="C:\Users\Gaurav.Mantri\AppData\Local\dftmp\Resources\40fae03f-8519-4c66-a36b-da8e2de73e9d\directory\DiagnosticStore\FailedReqLogFiles\Web" maxLogFiles="1000" />
            </site> 

Экземпляр 1:

<site name="deployment18(110).WindowsAzureService3.WindowsAzureService3WebRole_IN_1_Web" id="1273337584">
                <application path="/" applicationPool="92214b82-0516-4502-8e38-4d94c3cdf949" enabledProtocols="http">
                    <virtualDirectory path="/" physicalPath="D:\Projects\WindowsAzureService3\WindowsAzureService3WebRole\" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:82:" />
                </bindings>
                <logFile logExtFileFlags="Date, Time, ClientIP, UserName, SiteName, ComputerName, ServerIP, Method, UriStem, UriQuery, HttpStatus, Win32Status, BytesSent, BytesRecv, TimeTaken, ServerPort, UserAgent, Cookie, Referer, ProtocolVersion, Host, HttpSubStatus" logFormat="W3C" directory="C:\Users\Gaurav.Mantri\AppData\Local\dftmp\Resources\3c7c31cb-a2fb-4809-aadb-9238acb2f092\directory\DiagnosticStore\LogFiles\Web" period="Hourly" />
                <traceFailedRequestsLogging enabled="true" directory="C:\Users\Gaurav.Mantri\AppData\Local\dftmp\Resources\3c7c31cb-a2fb-4809-aadb-9238acb2f092\directory\DiagnosticStore\FailedReqLogFiles\Web" maxLogFiles="1000" />
            </site>

Как видно из приведенного выше в разделе «привязка», оба экземпляра пытались подключиться к порту 82 и, следовательно, к ошибке.

Временное решение

Команда Windows Azure SDK рекомендовала два обходных пути:

Установите Visual Studio 2010 SP1

Если вы используете Visual Studio 2010, рекомендуется установить SP1 для этого. По-видимому, это решает эту проблему. Поскольку у меня нет VS 2010 на моей машине, я не пробовал его, поскольку он не был применим ко мне.

Добавить переменную среды

Другим рекомендуемым обходным решением было добавить переменную среды с именем « _CSRUN_DISABLE_WORKAROUNDS » и установить значение этой переменной равным « 1 ». Чтобы установить переменную среды, выполните поиск « Панель управления », а затем перейдите в « Система » -> « Расширенные настройки системы » -> вкладка « Дополнительно » -> кнопка « Переменные среды … » -> кнопка « Создать… ».

Я также добавил скриншот для вашего удобства.

образ

После этого вам потребуется перезапустить IIS Express и эмулятор вычислений / хранения .

Я попробовал этот подход, и он работал для меня.

Надеюсь это поможет!