Ошибка доступа System.IO к папке Cache в приложении ASP.NET - PullRequest
2 голосов
/ 17 февраля 2011

Я работаю над приложением ASP.NET, которое обращается к Team Foundation Server 2010 и создает новые рабочие элементы. Приложение работает в DefaultAppPool, используя NetworkService в качестве удостоверения. Я получаю сообщение об ошибке ниже:

[UnauthorizedAccessException: Access to the path 'Cache\v10' is denied.]

System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +12892935
   System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj) +1594
   System.IO.Directory.CreateDirectory(String path) +311
   Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.GetDefaultCacheDirectory() +1807816
   Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.InitializeInternal() +225

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

Наш сервер работает под управлением Windows Server 2008 с IIS 7. Приложение работает корректно при запуске в режиме отладки с моей локальной машины разработчика.

Есть предложения?

Редактировать: пост Гранта ниже является правильным, из того, что я смог увидеть, но я уже выполнил эти шаги до моего первоначального поста. (Вот почему путь к Cache \ v10 вместо длинного пути C: \ Program Files ... по умолчанию.) Я дал учетной записи NetworkService полную собственность на корневую папку приложения IIS, но мы все еще получали исключение UnauthorizedAccessException.

Мы смогли обойти эту проблему, превратив папку Cache в сетевую папку и предоставив NetworkService полный доступ к этой папке. Я бы предпочел не делать этого, но, похоже, сейчас работает правильно. Если кто-нибудь знает, что я могу попытаться сделать «правильно», я был бы благодарен.

1 Ответ

6 голосов
/ 18 февраля 2011

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

Для обычного пользователя это находится в C: \ Users \ username \ AppData \ Local \ Microsoft \ Team Foundation \ 3.0 \ Cache For Network Service, это находится в C: \ ProgramData \ Microsoft \ Team Foundation \3.0 \ Cache

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

У вас есть два варианта:

  1. Создайте папку и предоставьте доступ к папке локальной группе IIS_WPG
  2. Создайте папку где-нибудь еще и дайте доступ к папке локальной группе IIS_WPG, а также установите ключ в своем файле web.config

<appSettings><add key="WorkItemTrackingCacheRoot" value="pathtofolder"/>

Более конкретно, вы можете узнать местоположение папки из этого кода:

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Microsoft\Team Foundation\3.0\Cache");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...