Назад | Перейти на главную страницу

Кэширование IIS удаленных виртуальных каталогов

Эта проблема

Я не могу развернуть веб-сайт (назовите его «zzz») в нашей производственной среде. Вот исключение:

Server Error in '/Admin' Application.

Parser Error

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: Could not load type 'zzz.Admin.Default'.

Source Error: 


Line 1:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="zzz.Admin.Default" %>
Line 2:  
Line 3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Source File: /Admin/default.aspx    Line: 1 

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0  

Аналогичная ошибка устранена на Вот или Вот но меня не интересует изменение кода (CodeBehind к CodeFile), потому что 1) проект работает отлично как на моем локальном компьютере, так и при развертывании для разработки (единственные изменения в коде находятся в файле web.config, указывающем на другую базу данных) и 2) есть некоторые признаки наличия других базовых проблема.

подробности

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

Если я скопирую папку / bin, как раньше, сайт снова заработает.

старая версия / код; работает на локальном, разработчика и продакшене; виртуальные каталоги.

+-+     website zzz
  +-+   /Account
  | +-- /Account/bin (Account.dll)
  |
  +-+   /Admin
  | +-- /Admin/bin (Admin.dll)
  |
  +...

новая версия / код; работает на local, dev; общая dll в папке bin; нет виртуальных каталогов. Не работает на производстве.

+-+     website zzz
  +-+   /Account
  |
  +-+   /Admin
  |
  +-+   /bin (zzz.dll)
  |
  +...

Чтобы сайт заработал на производстве, мне нужно скопировать папку bin в предыдущие места:

+-+     website zzz
  +-+   /Account
  | +-- /Account/bin (zzz.dll)
  |
  +-+   /Admin
  | +-- /Admin/bin (zzz.dll)
  |
  +...

Если я удалю временные файлы, я увижу, что папки / Admin и / Account создаются во временном местоположении (с новой dll), хотя все должно быть только в одной папке (верно?).

Я ожидаю, что временные файлы появятся в C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\ но вместо этого они создаются на один уровень выше, например C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\admin, по одному для каждого места, куда копируется папка / bin.


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


Окружающая среда

Две разные машины за балансировщиком нагрузки, но обе ссылаются на общую папку, в которой расположен веб-сайт. Управление DFS фактически используется для синхронизации папки веб-сайта между двумя компьютерами (может ли это быть связано?).

AFAIK наши среды разработки и производства одинаковы, но может быть что-то не синхронизированное, что уже случалось раньше. Не уверен, что я ищу, поскольку настройки IIS в целом выглядят одинаково.

В web.config нет ничего о кешировании.

пул приложений "Включить 32-разрядное приложение" имеет значение false во всех средах.

супервыборка не включен (никогда не был) включен.

Проект win forms, ориентированный на .NET Framework 4
IIS 7.5.7600.16385
Windows Server 2008 R2


Изменить обновление

Есть 15 патчей на dev, а не на prod, и 65 патчей на prod, а не на dev. Пытаясь найти лучший способ разобраться в этом (с помощью Вот ).

В моем случае перезагрузки не хватило.

Я открыл диспетчер IIS и просмотрел пул приложений. (Щелкните правой кнопкой мыши -> просмотреть приложения)

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

Итак, я выполнил инструкции из этого Почта убрать "фантомные приложения". (По сути: выключите iis. Редактировать C:\windows\system32\inetsrv\config\applicationHost.config и удалите узлы приложений, которые все еще включают неправильные пути. Перезагрузите iis.)

Перезагрузка устранила проблему (наше регулярное плановое обслуживание). Я предполагаю, что что-то было где-то в кэше. Если у кого-то есть объяснение получше, я приму этот ответ.