Клиент Team Foundation не использует предоставленные учетные данные

1

Я пытаюсь выполнить автоматическое взаимодействие с TFS Online (например, Visual Studio Online). При написании и тестировании кода на моей машине разработки это успешно связано:

creds = new Credentials(userName, password);

tfsConfig = TfsConfigurationServerFactory.GetConfigurationServer(new Uri(vsoUrl), creds);
tfsConfig.EnsureAuthenticated();

Класс полномочий:

public class Credentials : ICredentialsProvider
{
    string _userName;
    string _password;

    public Credentials(string userName, string password)
    {
        _userName = userName;
        _password = password;
    }

    public ICredentials GetCredentials(Uri uri, ICredentials failedCredentials)
    {
        return new NetworkCredential(_userName, _password);
    }

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

Затем я пошел развернуть код и запустить его под учетной записью службы, я получил эту ошибку:

Microsoft.TeamFoundation.TeamFoundationAuthenticationRedirectionException: TF30064: у вас нет доступа к серверу.

в

Microsoft.TeamFoundation.Client.TfsConnection.ThrowAuthorizationException (исключение e)

в

Microsoft.TeamFoundation.Client.TfsConnection.UseCredentialsProviderOnFailure (действие, Int32-попытки, булевский throwOnFailure)...

Поэтому после многих попыток решения я попытался передать неправильный "пароль" на своем локальном тестовом компьютере, и он все еще подключен отлично! Поэтому я могу только предположить, что я не правильно устанавливаю учетные данные в коде, и успешные локальные тесты связаны с тем, что я уже подключен к Visual Studio.

Может ли кто-нибудь понять это или определить, что я делаю неправильно?

Теги:
tfs
vsts

1 ответ

0
Лучший ответ

Я думаю, что причина, по которой она работает на вашей машине dev, заключается в том, что ваши действительные скейденции уже кэшированы, поэтому ваш CredentialsProvider вообще не вызывается.

Конструктор TfsConfigurationServer, принимающий ICredentialsProvider, помечен как устаревший в документации MSDN. Я бы рекомендовал использовать тот, который принимает ICredentials в качестве ввода (здесь). Код будет выглядеть так:

var userCreds = new NetworkCredential(userName, password);
var tfsServer = new TfsConfigurationServer(new Uri(vsoUrl), userCreds);
tfsServer.EnsureAuthenticated();

Другой вариант - использовать класс TfsTeamProjectCollection вместо TfsConfigurationServer.

  • 0
    Спасибо, теперь он не будет работать при разработке, если будут предоставлены неправильные учетные данные, но также происходит сбой с правильными учетными данными: «Microsoft.TeamFoundation.TeamFoundationAuthenticationRedirectionException возникла в Microsoft.TeamFoudnation.Client.dll, но не была обработана в коде пользователя. Дополнительная информация : TF30064: Вы не авторизованы для доступа к серверу. " Есть идеи?
  • 2
    Проверьте это сообщение в блоге . Он должен ответить на все ваши вопросы. Я попробовал это, и это работало очень хорошо на моем счете VSO.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню