TFS всегда использует встроенные учетные данные для подключения к TFSServer при подключении к домену - PullRequest
0 голосов
/ 14 ноября 2011

У меня ограниченный доступ к серверу 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);

1 Ответ

1 голос
/ 15 ноября 2011

Вот почему:

В своем первом фрагменте кода вы использовали следующий конструктор TfsTeamProjectCollection:

public TfsTeamProjectCollection(
    Uri uri,
    ICredentialsProvider credentialsProvider
)

И второй параметр определяется как:

Используется для получения учетных данных, когда учетные данные текущего сбой среды.

Таким образом, если учетные данные текущей среды (так называемая учетная запись ограниченного домена) не дают сбоя, он будет использовать ее вместо учетной записи администратора, с которой вы создали ICredentialsProvider. Вы вошли как zanewill , когда попробовали этот код?

Второй используемый вами конструктор принимает второй параметр в качестве «учетных данных аутентификации», поэтому он используется.

...