2010-05-13 32 views
9

MS Team Foundation Server'da belirli bir kullanıcı olarak kimlik doğrulaması yapmakta sorun yaşıyorum. Eski sürümlerde şu gibi görünecektir:TFS 2010'da Kimlik Doğrulama

Bazıları bana 2010 sürümü için bir uygarlığı anlatabilir mi? Şimdiye kadar var:

ICredentialsProvider cred = null; 

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

tfs.EnsureAuthenticated(); 

Teşekkür TFS 2010 için

cevap

13

, kullanmak aşağıdaki:

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

Not. – Simon

+1

Keşke yüzlerce kez kurtulabilirdim. – theo

+1

ayrıca: NetworkCredential ("kullanıcı adı", "parola", "etki alanı") yerine NetworkCredential ("kullanıcı adı", "parola", "etki alanı") gerekir. Bu benim için ilk yol çalıştı, ancak ikinci değil. – theo

4

Ben aynı sorunu yaşıyorum. Yukarıdaki çözüm benim için çalışmıyor ve gerçekten nedenini anlayamıyor. Cast istisnası almaya devam ediyorum. Bunu anlamaya çalışan bir gün geçirdim - bu nedenle mevcut geçici çözümümle sorunu paylaşacağımı düşündüm. Ben ICredentialsProvider uygulayan benim kendi iç sınıf oluşturduk - aşağıdaki gibi:

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 
} 

Daha sonra bu örneğini ve aşağıda yer geçmek: Ben NotifyCredentialsAuthenticated uygulamayan

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

Not - Bunun aslında ne yaptığından emin değilim, bu yüzden NotImplementedException'ı oraya bıraktım, böylece ne zamana kadar hiç aramamışsa onu yakalayabilirim. Şimdi başarılı bir şekilde TFS'ye bağlandı.

+1

NetworkCredential ("kullanıcı adı \\ etki alanı", "parola) yerine yeni NetworkCredential (" kullanıcı adı "," parola "," etki alanı ") oluşturmanız gerekebilir. – theo

+0

Bu benim için çalışıyor. – AMissico

0

Ben de bu yöntemi kullanarak bizim eski TFS 2008 sunucuya bağlanırken bazı sorunlar yaşadım ama davamı çözüldü şey gerçekten basitti:

:

Önce olmaya TFS Url tanımlanmış

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

URL'de kullanılan yol, VisualStudio ile bağlantı kurarken kullandığımız yoldur, bu yüzden API çağrılarında bunun aynı olması gerektiğini düşündüm, ancak bunu aşağıdaki kimlik doğrulama ile kullanmaya çalıştığımda, bir TF31002 aldım/404 hata:

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

Ancak, Url'yi TFS köküne değiştirdiğimde, OK onaylandı!

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

Bu kimseye yardım edip etmediğini bilmiyorum, ama kesinlikle bana hile yaptı!

0

Bu benim için oldukça iyi çalıştı: Ben kullanıcı adı 'domain_par' bölümünü kaldırıldı eğer bu bir etki alanı olmayan bir sunucuda benim için çalıştı

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