我正在开发一个ASP.NET webforms应用程序,它将作为一个简单的入口表单在TFS 2010中创建工作项。
当我在调试模式下本地运行应用程序时,该应用程序正常工作 - 提交完成并创建工作项。
当我将表单发布到我们的开发服务器时,它会出现黄色屏幕并抛出以下错误:
[SecurityException:TF50309:The 以下帐户没有 足够的权限来完成 操作: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框。
有什么建议吗?
答案 0 :(得分:1)
TeamFoundationServer类是obselete。您是否尝试过使用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));