2010-05-13 25 views
9

Tengo problemas para autenticarse como usuario específico en MS Team Foundation Server. En versiones anteriores, se vería así:Autenticación en TFS 2010

teamFoundationCredential = new System.Net.NetworkCredential("<USERNAME>", "<PASSWORD>", "<DOMAIN>"); 

TeamFoundationServer tfs = new TeamFoundationServer("http://mars:8080/", teamFoundationCredential); 

¿Puede alguien decirme el equivalente de la versión 2010? Hasta ahora tengo:

ICredentialsProvider cred = null; 

tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://asebeast.cpsc.ucalgar.ca:8080/tfs/DefualtCollection")); 

tfs.EnsureAuthenticated(); 

Gracias

Respuesta

13

Para TFS 2010, utilice la siguiente:

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(
     new Uri("http://asebeast.cpsc.ucalgar.ca:8080/tfs/DefaultCollection", 
     new System.Net.NetworkCredential("domain_name\\user_name", "pwd")); 
collection.EnsureAuthenticated(); 
+1

Nota esto funcionó para mí en un servidor que no sea de dominio si me quita la sección 'domain_par' del nombre de usuario. – Simon

+1

Desearía poder votar unas cien veces. – theo

+1

también:.. Nay que necesita NetworkCredential ("nombre de usuario", "contraseña", "dominio") en lugar de NetworkCredential ("nombre de usuario \\ dominio", "contraseña) Se trabajó para mí la primera forma, pero no el segundo – theo

4

He tenido el mismo problema. La solución anterior no funciona para mí y realmente no puedo entender por qué. Sigo recibiendo una excepción de cast. Pasé un día tratando de resolver esto, así que pensé en compartir mi solución actual al problema. He creado mi propia clase interna que implementa ICredentialsProvider - de la siguiente manera:

private class MyCredentials : ICredentialsProvider 
{ 
    private NetworkCredential credentials; 
    #region ICredentialsProvider Members 
    public MyCredentials(string user, string domain, string password) 
    { 
     credentials = new NetworkCredential(user, password, domain); 
    } 

    public ICredentials GetCredentials(Uri uri, ICredentials failedCredentials) 
    { 
     return credentials; 
    } 

    public void NotifyCredentialsAuthenticated(Uri uri) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

luego ejecutar este paso y en la siguiente manera:

MyCredentials credentials = new MyCredentials(UserName, Password, Domain); 
TfsTeamProjectCollection configurationServer = 
    TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
     new Uri(tfsUri), credentials); 

Tenga en cuenta que no he implementado el NotifyCredentialsAuthenticated - No estoy seguro de qué es lo que realmente hace, así que dejé la excepción NotImplementedException allí para que pudiera detectar cuando se llama, lo que hasta ahora no ha sucedido. Ahora conectado con éxito a TFS.

+1

Es posible que haya necesaria para simplemente hacer nuevos NetworkCredential ("dominio" "nombre de usuario", "contraseña") en lugar de NetworkCredential ("nombre de usuario \\ dominio", "contraseña) – theo

+0

Esto funciona para mí. – AMissico

0

he tenido algunos problemas para conectarse a nuestro antiguo servidor de TFS 2008 utilizando este método, así, pero lo que resolvió mi caso fue muy simple:

Primero define la TFS Url a ser:

private const string Tfs2008Url = @"http://servername:8080/tfs/"; 
static readonly Uri Tfs2008Uri = new Uri(Tfs2008Url); 

La ruta utilizada en la URL es la que utilizamos cuando conectamos a través de VisualStudio, así que pensé que tenía que ser la misma en las llamadas API, pero cuando traté de usar esto con la siguiente autenticación, obtuve un TF31002/404 error:

var collection = new TfsTeamProjectCollection(Tfs2008Uri,new NetworkCredential("AdminUser","password","domain_name")); 
collection.EnsureAuthenticated(); 

Pero cuando cambié la URL a la raíz TFS, ¡se autenticó OK!

private const string Tfs2008Url = @"http://servername:8080/"; 
static readonly Uri Tfs2008Uri = new Uri(Tfs2008Url); 

No sé si eso ayudó a alguien, ¡pero seguro que me sirvió de algo!

0

Esto ha funcionado muy bien para mí:

_tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri); 
_tfs.ClientCredentials = new TfsClientCredentials(new WindowsCredential(new NetworkCredential("myUserName", "qwerty_pwd", "myDomainName"))); 
_tfs.EnsureAuthenticated(); 
Cuestiones relacionadas