2009-04-26 4 views
12

Я пытаюсь загрузить некоторые данные из экземпляра служб отчетов на нашем сервере TFS.
Учитывая, что код должен запускаться на компьютере, который не подключен к домену, я решил, что сам установил учетные данные. Не повезло, получил HTTP 401 Unauthorized назад. Хорошо, поэтому я подключил Fiddler, чтобы посмотреть, что происходит.System.Net.WebClient терпит неудачу

Но вот когда я получил Heisenberged - звонок теперь прошел без заминки. Таким образом, аутентификация проходит через подключенный Fiddler, но без него. Является ли Webclient сломанным или я что-то не хватает здесь?

private void ThisWorksWhenDomainJoined() 
    { 
     WebClient wc = new WebClient(); 
     wc.Credentials = CredentialCache.DefaultNetworkCredentials; 
     wc.DownloadString("http://teamfoundationserver/reports/........"); //Works 
    } 

    private void ThisDoesntWork() 
    { 
     WebClient wc = new WebClient(); 
     wc.Credentials = new NetworkCredential("username", "password", "domain"); 
     wc.DownloadString("http://teamfoundationserver/reports/........"); //blows up wih HTTP 401 
    } 
+11

+1 для использования Принцип неопределённостей Гейзенберга как глагол, никогда не слышал, что один раньше! –

ответ

4

Посмотрите на эту ссылку:
HTTP Authorization and .NET WebRequest, WebClient Classes

У меня была такая же проблема, как и вы. Я добавил только одну строку, и она начала работать. Попробуйте

private void ThisDoesntWork() 
    { 
     WebClient wc = new WebClient(); 
     wc.Credentials = new NetworkCredential("username", "password", "domain"); 
     //After adding the headers it started to work ! 
     wc.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
     wc.DownloadString("http://teamfoundationserver/reports/........"); //blows up wih HTTP 401 
    } 
+0

добавление строки заголовков хорошо работало для меня! – viperguynaz

1

Что происходит, когда вы используете это?

wc.Credentials = CredentialCache.DefaultCredentials; 

Кроме того, вы уверены, что имеете правильное имя пользователя, пароль и домен?

Также: Интересно, меняется ли Fiddler вокруг некоторых символов Юникода, когда .net ломает их или что-то в этом роде. Если ваш пользователь/пароль/домен имеет юникод, попробуйте выйти из него, как "\u2638", а не "☺".

+3

При работе с аналогичной проблемой с коллегой только сейчас мы определили, что скрипач обращается к веб-службе с вашими локальными учетными данными, где, поскольку код в приложении Asp.Net будет использовать учетные данные пользователя asp.net, что, скорее всего, t имеют разрешения. – travis

2

Попробуйте это ...

var credCache = new CredentialCache(); 
credCache.Add(new Uri("http://teamfoundationserver/reports/........""), 
         "Basic", 
         new NetworkCredential("username", "password", "DOMAIN")); 
wc.Credentials = credCache; 

Если это не сработает, попробуйте заменить "Basic" с "переговоры".

1

я смог обойти эту ошибку с помощью объекта CredentialCache следующим образом:

WebClient wc = new WebClient(); 
CredentialCache credCache = new CredentialCache(); 
credCache.Add(new Uri("http://mydomain.com/"), "Basic", 
new NetworkCredential("username", "password")); 

wc.Credentials = credCache; 

wc.DownloadString(queryString)); 
Смежные вопросы