Как вы подключаетесь к серверу TFS в C#, используя определенные учетные данные?

Я пытаюсь написать приложение aC#, которое подключается к TFS и получает информацию о рабочем элементе. К сожалению, похоже, что во всех примерах использования TFS SDK используются учетные данные по умолчанию для текущего пользователя (т.е. информация для входа в мой домен). Ближайшая часть информации, которую я нашел, это использовать TeamFoundationServer (String, ICredentials) конструктор, однако я не могу найти информацию для подходящего класса, который взаимодействует с ICredentials интерфейс (тем более что он, похоже, использует не ICredentials System.Net, а специфичные для TeamFoundationServer ICredentials).

У кого-нибудь есть понимание для входа в TFS с определенной комбинацией имени пользователя / пароля / домена?

3 ответа

Решение

Следующий код должен помочь вам:

NetworkCredential cred = new NetworkCredential("Username", "Password", "Domain");
tfs = new TeamFoundationServer("http://tfs:8080/tfs", cred);
tfs.EnsureAuthenticated();

Домен - это либо фактический домен, либо в ситуации рабочей группы это будет имя сервера, на котором размещен уровень приложений TFS.

Для TFS 2015 и 2017, упомянутые объекты и методы были (или находятся) устаревшими.

Чтобы подключиться к TFS с использованием определенных учетных данных:

// For TFS 2015 & 2017

// Ultimately you want a VssCredentials instance so...
NetworkCredential netCred = new NetworkCredential(@"user.name", @"Password1", "DOMAIN");
WindowsCredential winCred = new WindowsCredential(netCred);
VssCredentials vssCred = new VssClientCredentials(winCred);

// Bonus - if you want to remain in control when
// credentials are wrong, set 'CredentialPromptType.DoNotPrompt'.
// This will thrown exception 'TFS30063' (without hanging!).
// Then you can handle accordingly.
vssCred.PromptType = CredentialPromptType.DoNotPrompt;

// Now you can connect to TFS passing Uri and VssCredentials instances as parameters
Uri tfsUri = new Uri(@"http://tfs:8080/tfs");
var tfsTeamProjectCollection = new TfsTeamProjectCollection(tfsUri, vssCred);

// Finally, to make sure you are authenticated...
tfsTeamProjectCollection.EnsureAuthenticated();

Спустя годы, вот как вы делаете это с TFS 2013 API:

// Connect to TFS Work Item Store
ICredentials networkCredential = new NetworkCredential(tfsUsername, tfsPassword, domain);
Uri tfsUri = new Uri(@"http://my-server:8080/tfs/DefaultCollection");
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(tfsUri, networkCredential);
WorkItemStore witStore = new WorkItemStore(tfs);

Если это не сработает, попробуйте передать учетные данные через другие Credential занятия (работали для меня):

// Translate username and password to TFS Credentials
ICredentials networkCredential = new NetworkCredential(tfsUsername, tfsPassword, domain);
WindowsCredential windowsCredential = new WindowsCredential(networkCredential);
TfsClientCredentials tfsCredential = new TfsClientCredentials(windowsCredential, false);

// Connect to TFS Work Item Store
Uri tfsUri = new Uri(@"http://my-server:8080/tfs/DefaultCollection");
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(tfsUri, tfsCredential);
WorkItemStore witStore = new WorkItemStore(tfs);
Другие вопросы по тегам