Не удается добавить рабочий элемент в TFS 2010 из приложения ASP.NET из-за разрешений - PullRequest
1 голос
/ 16 февраля 2011

Я работаю над приложением ASP.NET для веб-форм, которое будет служить простой формой ввода для создания рабочих элементов в 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.

Строка в исключении, в которой упоминается имя_сервера $, меня озадачивает. Похоже, что IIS решает попытаться получить доступ к TFS с помощью идентификатора пула приложений вместо учетных данных, которые я предоставляю явно.

Наш сервер разработки представляет собой сервер Server 2008 с IIS 7.

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

1 Ответ

1 голос
/ 17 февраля 2011

Класс 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...