由于权限问题,从 ASP.NET 应用程序向 TFS 2010 添加工作项失败

Posted

技术标签:

【中文标题】由于权限问题,从 ASP.NET 应用程序向 TFS 2010 添加工作项失败【英文标题】:Adding a work item to TFS 2010 from ASP.NET app fails due to permissions 【发布时间】:2011-02-16 18:30:01 【问题描述】:

我正在开发一个 ASP.NET webforms 应用程序,该应用程序将用作在 TFS 2010 中创建工作项的简单接收表单。

当我在本地以调试模式运行应用程序时,它可以正常工作——提交完成并创建了工作项。

当我将表单发布到我们的开发服务器时,它会出现黄屏并抛出以下错误:

[安全异常:TF50309: 以下帐号没有 足够的权限来完成 操作:DOMAINNAME\SERVERNAME$。这 需要以下权限 执行此操作:查看 集合级信息。]

在我的代码中,我尝试使用服务帐户访问 TFS,据我所知,当我在调试模式下运行时,服务帐户被正确使用。

这是我的 C# 的样子:

string tfsServerUrl = "http://servername:8080/tfs";
string tfsProject = "Web Team Projects";
NetworkCredential tfsCredential = new NetworkCredential("ServiceAccountName", "password", "DOMAIN");
TeamFoundationServer tfs = new TeamFoundationServer(tfsServerUrl, tfsCredential);
tfs.Authenticate();
WorkItemStore workItemStore = new WorkItemStore(tfsServerUrl);

如果我在 tfs.Authenticate() 行设置断点,则服务器对象将服务帐户名称显示为当前用户并且 IsAuthenticated = true。

异常中提到 SERVERNAME$ 的那一行让我很困惑。似乎 IIS 决定尝试使用应用程序池标识而不是我明确提供的凭据来访问 TFS。

我们的开发服务器是一个运行 IIS 7 的 Server 2008 机器。

有什么建议吗?

【问题讨论】:

【参考方案1】:

TeamFoundationServer 类已过时。您是否尝试过改用 TfsTeamProjectCollection (TFS 2008) 或 TfsConfigurationServer (2010) 类?

string tfsServerUrl = "http://servername:8080/tfs";
System.Net.NetworkCredential tfsCredential = new System.Net.NetworkCredential("ServiceAccountName", "password", "DOMAIN");
TfsConfigurationServer tfs =  new TfsConfigurationServer(new Uri(tfsServerUrl), tfsCredential);
tfs.Authenticate(); // You should be able to omit this
WorkItemStore workItemStore = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));

【讨论】:

谢谢,西蒙。这有帮助,你间接指出了我原来的问题。我正在对服务器进行身份验证,但随后没有使用服务器对象来获取工作项存储,因此我的应用程序正在恢复到它运行时的任何身份。我本可以省略示例代码的 6 行中的前 5 行并得到相同的结果。

以上是关于由于权限问题,从 ASP.NET 应用程序向 TFS 2010 添加工作项失败的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET 应用程序访问 Azure 存储帐户文件共享

从 ASP.NET 站点创建 Windows 帐户并设置文件权限

IIS ASP.net 目录权限 [重复]

如何从 Asp.net 核心向 Flutter 应用发送推送通知

通过 ASP.NET 启动服务需要哪些权限?

从 C# Asp.net 向 Lync 发送消息