Dears
Пожалуйста, помогите мне с вопросом о подключении VS к Tfs.
Я написал плагин VS 2017, который использует TfsTeamProjectCollection для подключения к серверу TFS. Сервер Tfs размещен в https://dev.azure.com
Однако на некоторых компьютерах не удается подключиться к серверу Tfs.
Например, я попытался воспроизвести это и очистил все кэши, как описано здесь . После очистки / соединения нескольких циклов у меня получилось следующее:
- VS Team Explorer подключен к Tfs. Я могу оформить заказ / проверить файлы, загрузить историю и т. Д.
- Моя надстройка не может подключиться с ошибкой 401 без авторизации.
- Тест единства, запущенный VS, может подключаться к тем же Tfs с использованием того же кода
- Я создал пример консольного приложения, которое использует для подключения точно такой же класс и метод из надстройки, и оно тоже работает.
Вот исходный код, который я использую для подключения:
public override TfsTeamProjectCollection CreateCollection(WorkspaceInfo wi)
{
var s = (overrideConfig ?? Config);
var u = wi.ServerUri;
var vssCred = new VssClientCredentials(); // GetCredentials(s.Vsts);
Logger.Debug("getting collection for url:{0}", u);
TfsTeamProjectCollection tpc = null;
try
{
tpc = new TfsTeamProjectCollection(u, vssCred);
Logger.Debug("authenticating");
tpc.Authenticate(); // 401 non authorized exception here
}
Я пытался добавить vssCred.Storage = new VssClientCredentialStorage();
до Autheticate()
, но не повезло
Затем я проверил сетевые пакеты с помощью приложения Fiddler.
Он показывает, что тот же пакет запроса отправляется с использованием модульного теста, консольного приложения и надстройки.
Но консольное приложение и юнит-тест выдают начальный запрос
POST
https://dev.azure.com/quipu-cwnet/Services/v3.0/LocationService.asmx
HTTP / 1.1
и ответ
HTTP / 1.1 401 Несанкционированный
X-ТПО-FedAuthRedirect:
https://app.vssps.visualstudio.com/_signin?realm=dev.azure.com&reply_to=https%3A%2F%2Fdev.azure.com%2F...
Затем консоль и модульный тест отправляют пакет на URL перенаправления и запрашивают учетные данные пользователя.
Когда надстройка пытается подключиться к серверу Tfs, Fiddler показывает только первый запрос POST и ответ 401 (с тем же заголовком X-TFS-FedAuthRedirect. Но перенаправление отсутствует. Со стороны пользователя это выглядит как зависание приложения для некоторых период после получения ответа 401, который затем завершается с ошибкой 401.
Сборки модульного тестирования и надстроек имеют одинаковые ссылки на сборки 15.0.0, такие как Microsoft.TeamFoundation.VersionControl.Client и связанные с ними.
Я пробовал VssConnection, но тот же
VssConnection connection = new VssConnection(u, vssCred);
connection.ConnectAsync().SyncResult();
var prj = connection.GetClient<ProjectHttpClient>();
var prjCollection = prj.GetProjects().Result; // 401 error here when is executed as VS add-in
foreach (var pc in prjCollection)
Logger.Debug("\tVssConnection project {0} {1}", pc.Id, pc.Name);
Я использую того же пользователя для запуска VS (и надстройки) и консоли. Нет повышенных разрешений.
Могу ли я что-нибудь сделать с TfsConnection при использовании в качестве надстройки VS?