0

我对 TFS 服务器的访问权限有限,所以我打算在代码中使用管理员帐户连接到服务器。我发现当我在未加入域的计算机上部署服务时,它工作得很好,但是在加入域的计算机上部署服务时,它使用集成凭据。非常感谢您的帮助!以下是我的代码。

        Uri tfsUri = Common.Helper.GetCollectionUri();
        UserCredential userCredential = new UserCredential("administrator", "pass@word1", "zanewill.net");

        TfsTeamProjectCollection col = new TfsTeamProjectCollection(tfsUri, userCredential);

        TeamFoundationIdentity identity;
        col.EnsureAuthenticated();
        col.GetAuthenticatedIdentity(out identity);

我想要管理员的凭据,但身份始终是“zanewill”的凭据,这是一个受限域帐户。

UserCredential 的类类似于以下公共类 UserCredential : ICredentialsProvider { private NetworkCredential networkCredential;

    public UserCredential(string userName, string password, string domain) {
        networkCredential = new NetworkCredential(userName, password, domain);

    }

    public System.Net.ICredentials GetCredentials(Uri uri, System.Net.ICredentials myCredentials) {
        return networkCredential;
    }

    public void NotifyCredentialsAuthenticated(Uri uri) {

    }
}

我像下面的代码一样使用 NetworkCredential,它可以工作,我不知道为什么。

        Uri tfsUri = Common.Helper.GetCollectionUri();
        var networkCredential = new NetworkCredential("administrator", "pass@word1", "zanewill.com");

        TfsTeamProjectCollection col = new TfsTeamProjectCollection(tfsUri,networkCredential);
        TeamFoundationIdentity identity;
        col.EnsureAuthenticated();
        col.GetAuthenticatedIdentity(out identity);
4

1 回答 1

1

原因如下:

在您的第一段代码中,您使用了TfsTeamProjectCollection的以下构造函数:

public TfsTeamProjectCollection(
    Uri uri,
    ICredentialsProvider credentialsProvider
)

第二个参数定义为:

用于在当前环境的凭据失败时获取凭据。

因此,如果当前环境的凭据(即您提到的受限域帐户)没有失败,它将使用该凭据而不是您创建 ICredentialsProvider 的管理员帐户。您在尝试此代码时是否以zanewill 身份登录?

您使用的第二个构造函数将第二个参数作为“身份验证凭据”,因此它就是正在使用的那个。

于 2011-11-15T02:07:06.700 回答