ASP.NET应用程序中的Cache文件夹上的System.IO访问错误

Jos*_*arl 2 asp.net tfs iis-7

我正在开发一个访问Team Foundation Server 2010并创建新工作项的ASP.NET应用程序.应用程序在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
Run Code Online (Sandbox Code Playgroud)

问题是我使用服务帐户连接到TFS,因为此表单的用户无权在TFS中添加工作项.我已经为网络服务和特定于表单的服务帐户提供了对应用程序根目录的完全控制权.我不确定如何解决这个问题.

我们的服务器运行的是带有IIS 7的Windows Server 2008.当我从本地开发机器以调试模式运行时,该应用程序可以正常工作.

有什么建议?

编辑:下面的格兰特的帖子是正确的,从我能够看到的,但我已经在我的原始帖子之前完成了这些步骤.(这就是为什么路径是Cache\v10而不是长C:\ Program Files ...默认路径.)我给了NetworkService帐户IIS应用程序的根文件夹的完全所有权,但我们仍然得到UnauthorizedAccessException.

我们能够通过将Cache文件夹转换为网络共享并为NetworkService提供对共享的完全访问权限来解决此问题.我不想这样做,但它现在似乎正常工作.如果有人知道我可以尝试做到这一点"正确",我将不胜感激.

Gra*_*day 6

使用工作项跟踪对象模型时,它需要磁盘上的文件夹来存储元数据缓存.

对于普通用户,这是在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");