Добавление OutputCache в ASP.NET WebForm приводит к сбою моего сайта :( - PullRequest
2 голосов
/ 29 марта 2010

Когда я добавляю один из этих ...

<%@ OutputCache Duration="600" Location="Any" VaryByParam="*" %>

или

<%@ OutputCache CacheProfile="CmsArticlesListOrItem" %>

(.. and this into the web.config file...)
<caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="CmsArticlesListOrItem" duration="600" varyByParam="*" />
         </outputCacheProfiles>
    </outputCacheSettings>

    <sqlCacheDependency ........ ></sqlCacheDependency
</caching>

моя страница / сайт падает со следующей ошибкой: -

Source: System.Web
----------------------------------------------------------------------------
TargetSite: System.Web.DirectoryMonitor FindDirectoryMonitor(System.String, Boolean, Boolean)
----------------------------------------------------------------------------
Message:System.Web.HttpException: Directory 'C:\Web Sites\My Site Foo - Main Site\Controls\InfoAdvice' does not exist. Failed to start monitoring file changes.
   at System.Web.FileChangesMonitor.FindDirectoryMonitor(String dir, Boolean addIfNotFound, Boolean throwOnError)
   at System.Web.FileChangesMonitor.StartMonitoringPath(String alias, FileChangeEventHandler callback, FileAttributesData& fad)
   at System.Web.Caching.CacheDependency.Init(Boolean isPublic, String[] filenamesArg, String[] cachekeysArg, CacheDependency dependency, DateTime utcStart)
   at System.Web.Caching.CacheDependency..ctor(Int32 dummy, String[] filenames, DateTime utcStart)
   at System.Web.Hosting.MapPathBasedVirtualPathProvider.GetCacheDependency(String virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
   at System.Web.ResponseDependencyList.CreateCacheDependency(CacheDependencyType dependencyType, CacheDependency dependency)
   at System.Web.HttpResponse.CreateCacheDependencyForResponse(CacheDependency dependencyVary)
   at System.Web.Caching.OutputCacheModule.InsertResponse(HttpResponse response, HttpContext context, String keyRawResponse, HttpCachePolicySettings settings, CachedVary cachedVary, CachedRawResponse memoryRawResponse)
   at System.Web.Caching.OutputCacheModule.OnLeave(Object source, EventArgs eventArgs)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Окей .. так по какой-то причине OutputCache хочет, чтобы там была папка / файл????

Ну, у меня есть этот сайт живым около 3 лет, и я почти уверен, что папок \Controls и \Controls\InfoAdvice не существует на моем рабочем сервере.На моем локальном хосте он, конечно, работает ... и содержит большой список элементов управления ascx.

Но их нет на моем живом сервере.

Итак ... что здесь происходит?

Может кто-нибудь помочь, пожалуйста?

Ой :) Прежде чем кто-то предложит мне создать эти две папки и даже вставить случайный файл в эти папки ... и иметь некоторый случайный текст в этих случайных файлах.. Я сделал это, и это, похоже, не работает, все же: (

Пожалуйста, помогите!

Обновление

Когда я попытался выполнить TRASS FAILED REQUEST TRACE сIIS, я заметил это ....

альтернативный текст http://img136.imageshack.us/img136/1351/notsure.png

1 Ответ

0 голосов
/ 31 марта 2010

Хм.Я не уверен, если это приемлемый ответ или нет, но я должен это выяснить.

  1. Проект ASP.NET Веб-сайт (в отличие от Web Aplication или MVC1 / 2 ).
  2. Мне пришлось создать папку для элемента управления, которая существует на странице aspx.(например, \ controls \ infoadvice
  3. Мне пришлось создать папку для главной страницы, которая используется страницей \ masterpages

Затем я добавил простой текстовый файл в обаэти новые папки ... с каким-то фиктивным содержимым в них. Это позволило опубликовать эти папки (и фиктивные файлы), когда проект "собран" для развертывания (я использую проекты веб-развертывания + сборка TFS).

Теперь это работает.

Таким образом, проблема заключалась в том, что для кэширования требуется проверка папки. Я предполагаю, что учетная запись (NetworkSystem) просто не позволяет ей создавать папку, если она не 'не существует ... хотя я вручную дал разрешения на корневую папку (и я предполагаю, дети).

Ну хорошо - проблема решена. Мне не нравится .. но она решена.

...