Я работаю над каркасом, в котором страницы .aspx и .master встроены в сборку, используя VirtualPathProvider для маршрутизации URL-адреса на определенный встроенный ресурс.
Пример URL: /_framework.aspx/mypage.aspx (который использует /_framework.aspx/mymaster.master)
- _framework.aspx заставит IIS6 направить запрос через каркас ASP.NET
- все, что после .aspx обрабатывается как PathInfo в .NET Framework
В веб-сервере Visual Studio 2008 виртуальный путь указан правильно: /_framework.aspx/mypage.aspx
но в IIS6 виртуальный путь: /_framework.aspx
Если я запрашиваю два файла: /_framework.aspx/file1.css и /_framework.aspx/file2.css
файл2 будет иметь то же содержимое, что и файл1.
Я подозреваю, что IIS6 учитывает путь к файлу (_framework.aspx) и кэширует поток файлов, возвращаемый из сборки, таким образом обрабатывая оба URL-адреса как один и тот же файл.
Временное решение:
Я реализовал класс CacheDependency, как этот
class ImmediateExpiryCacheDependency : System.Web.Caching.CacheDependency
{
public ImmediateExpiryCacheDependency()
{
base.NotifyDependencyChanged(null, null);
}
}
Срок действия файлового кэша истекает, но он не работает с главными страницами, я полагаю, потому что он запрашивается до истечения срока действия кэша через NotifyDependencyChanged.
Необходимое решение :
Если я вернул ноль в GetCacheDependency, IIS6 не истекает файл сразу. Как правильно немедленно истечь файл или полностью отключить кэширование. Более того, я хотел бы исправить способ, которым IIS6 работает с URL-адресом, поскольку кэширование на самом деле хорошо, если бы он использовал полный URL-адрес файла.