2016-04-05 1 views
1

Я пытаюсь получить доступ к серверу TFS с помощью кода C#, и я продолжаю работать в этой проблеме. Проблема возникает только тогда, когда я пытаюсь отлаживать код, но если я просто попытаюсь создать и запустить его успешно.Доступ к tfs из исключения проверки подлинности C#

var credentials = new NetworkCredential("username","password"); 
var projects = new TfsTeamProjectCollection(new Uri("http://xxx-xxxx.com:8080/tfs/xxxxx"), credentials); 
    projects.EnsureAuthenticated(); 

    if (Directory.Exists(localPath)) 
    { 
     foreach (var item in Directory.GetFiles(localPath, "*.*", SearchOption.AllDirectories)) 
     { 
      File.SetAttributes(item, FileAttributes.Normal); 
     } 
      Directory.Delete(localPath, true); 
    } 


WorkingFolder[] mapping = serverItem.Select(x => new WorkingFolder(x, Path.Combine(localPath, GetDummyString(x)))).ToArray(); 

var workspace = versionControl.CreateWorkspace(workspaceName, Environment.UserName, Environment.UserName + " Checkout", mapping); 
workspace.Get(); 

Это происходит на projects.EnsureAuthenticated();. Я получаю:

System.Net.WebException occurred: 
    HResult=-2146233079 
    Message=The remote server returned an error: (401) Unauthorized. 
    Source=System 
    StackTrace: at System.Net.HttpWebRequest.GetResponse() 
    InnerException: null 

Это происходит только тогда, когда я пытаюсь отлаживать, если я комментировать эту линию, что я получаю новый WebException говоря: Additional information: The remote server returned an error: (401) Unauthorized. от вызова к versionControl.CreateWorkspace()

UPDATE: Я заметил, когда он выдает исключение во время отладки, если я пытаюсь продолжить (щелкнув F10 несколько раз), исключение исчезает, и код преуспевает.

UPDATE 2: После борьбы с этой проблемой на некоторое время, кажется, вопрос, почему я получаю эту ошибку, потому что некоторые из свойств не инициализируются при создании объекта. Как вы можете видеть на картинке: Link here

Как вы можете видеть на картинке, что не удается инициализировать, являются AuthorizedIdentity и CatalogNode. Любая идея, как я могу ее решить?

+0

Является ли это в контексте веб-приложения ASP.NET, случайно? –

+0

Нет, я использую приложение для настольных компьютеров. Я пытаюсь подключиться к tfs через консольное приложение, которое позже будет сделано как библиотека классов. – Min0

+0

Вы получаете ответ «HTTP 401», что означает, что запрос не был применен, поскольку ему не хватает действительных учетных данных для целевого ресурса. Я вижу, что вы не добавляете NetworkCredential в любом месте, поэтому я бы предложил добавить к «проектам», если сможете. В противном случае я не совсем уверен, где вы должны добавить его, но это будет способ пойти в любом случае – Ortund

ответ

1

Добавить строку домен будет избавиться от этой проблемы:

var credentials = new NetworkCredential("Username", "Password", "Domain"); 
    var projects = new TfsTeamProjectCollection(new Uri("http://tfsserver:8080/tfs/teamprojectcollection"), credentials); 
    projects.EnsureAuthenticated(); 
+0

для домена можно использовать 'Environment.UserDomainName'? Если да, это не устраняет проблему, потому что когда я добавляю ее и пытаюсь отлаживать, она дает мне исключение на следующем шаге 'projects.EnsureAuthenticated()' (то же самое webException: удаленный сервер возвратил ошибку: (401) Неавторизованный) – Min0

+0

Я попробовал var credentials = new NetworkCredential («Домен \ Имя пользователя», «Пароль»), но не работает. Использование var credentials = new NetworkCredential («Username», «Password», «Domain») работает. –

+0

Вы пытаетесь запустить код или отладить? Я выполняю этот фрагмент кода, хотя проект модульного тестирования, и если я просто пытаюсь запустить, он все зеленый, но если я пытаюсь отлаживать, он всегда сбой на вызове 'EnsureAuthenticated' ... – Min0

Смежные вопросы