2010-06-30 19 views
6

Je tente d'écrire une application C# qui se connecte à TFS et récupère des informations sur les éléments de travail. Malheureusement, il semble que tous les exemples d'utilisation du SDK TFS utilisent les informations d'identification par défaut pour l'utilisateur actuel (c'est-à-dire les informations de connexion de mon domaine). L'information la plus proche que j'ai trouvée est d'utiliser le constructeur TeamFoundationServer (String, ICredentials), mais je ne trouve aucune information pour une classe appropriée qui s'interface avec l'interface ICredentials (d'autant plus qu'elle ne semble pas utiliser les ICredentials System.Net mais un ICredentials spécifique à TeamFoundationServer) . Est-ce que quelqu'un a un aperçu de la connexion à TFS avec une combinaison spécifique nom d'utilisateur/mot de passe/domaine?Comment vous connectez-vous à un serveur TFS en C# en utilisant des informations d'identification spécifiques?

Répondre

16

Le code suivant devrait vous aider:

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

domaine est soit le domaine réel, ou dans une situation de groupe de travail, il serait le nom du serveur qui héberge le niveau d'application TFS.

+0

Génial qui a fonctionné! Merci. – KallDrexx

+2

Notez que 'TeamFoundationServer' a été déprécié en faveur de 'TfsConfigurationServer', mais ce code est également valide pour cela. –

3

ans plus tard, voici comment vous le faites avec l'API TFS 2013:

// 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); 

Si cela ne fonctionne pas, essayez de passer les informations d'identification par d'autres Credential classes (a travaillé pour moi):

// 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); 
+0

Pourquoi ne pas simplement passer le 'NetworkCredential' directement au' TfsTeamProjectCollection', au lieu de créer deux objets inutiles? –

+0

Eh bien, j'ai essayé cela, et je recevais le tristement célèbre «authentification de base nécessite une connexion sécurisée au serveur» erreur. Même après avoir effacé mes entrées Windows Credential Manager, cela se passait toujours. Puis j'ai expérimenté un peu jusqu'à ce que ça marche. Peut-être que vous avez raison et vous n'en avez pas besoin :-) Je voulais juste sauver le problème à quelqu'un d'autre – Heliac

+0

Merci pour les commentaires - c'est inattendu, alors je vais m'assurer que nous examinons le problème. –

7

Pour TFS 2015 & 2017, les objets et les méthodes ci-dessus ont été (ou sont) dépréciée. Pour se connecter à TFS en utilisant des informations d'identification spécifiques:

// For TFS 2015 & 2017 

    // Ultimately you want a VssCredentials instance so... 
    NetworkCredential netCred = new NetworkCredential(@"DOMAIN\user.name", @"Password1"); 
    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(); 

Espérons que cela aide.