2010-05-13 114 views
9

我在MS Team Foundation Server上以特定用户身份验证时遇到问题。在旧版本中,它看起来像:在TFS 2010上进行身份验证

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

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

有人可以告诉我2010版的equivilent。到目前为止,我有:

ICredentialsProvider cred = null; 

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

tfs.EnsureAuthenticated(); 

感谢

回答

13

对于TFS 2010,使用以下命令:

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

注意这个工作对我来说是无域服务器上,如果我删除的用户名的“domain_par”部分。 – Simon 2011-12-02 11:36:38

+1

我希望我能大约上百次。 – theo 2011-12-31 16:14:43

+1

另外:你不需要NetworkCredential(“用户名”,“密码”,“域”)而不是NetworkCredential(“用户名\\域名”,“密码”),它对我来说是第一种方式,但不是第二种。 – theo 2011-12-31 16:15:58

4

我一直有同样的问题。上述解决方案不适合我,真的不知道为什么。我不断收到演员异常。 花了一天的时间试图弄清楚 - 所以想到我会分享我目前的解决方法,以解决问题。 我已经创建了实现ICredentialsProvider我自己的内部类 - 如下:

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 
} 

我然后实例化这个并把它传递中,如下所示:

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

请注意,我还没有实现的NotifyCredentialsAuthenticated - 不确定这实际上做了什么,所以留下了NotImplementedException,这样我就可以捕捉到它的调用时间,迄今为止还没有发生。现在已成功连接到TFS。

+1

您可能需要执行新的NetworkCredential(“username”,“password”,“domain”)而不是NetworkCredential(“username \\ domain”,“password” – theo 2011-12-31 16:15:36

+0

这适用于我。 – AMissico 2012-10-10 01:17:08

0

我已经使用这种方法,以及连接到我们的老TFS 2008服务器的一些问题,但解决了我的情况下,事情真的很简单:

首先,我定义的TFS网址为:

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

URL中使用的路径是我们在通过VisualStudio连接时使用的路径,所以我认为这在API调用中必须是相同的,但是当我尝试通过以下身份验证使用该路径时,我得到了一个TF31002/404错误:

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

但是当我将Url改为TFS根目录时,它通过了OK!

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

不知道这是否帮助了任何人,但它确实为我做了诡计!

0

这工作很适合我:

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