2009-04-26 6 views
12

TFSサーバーのReporting Servicesインスタンスからデータをダウンロードしようとしています。
ドメインに参加していないコンピュータでコードを実行する必要があることを考えれば、自分で資格情報を設定すると考えました。いいえ、HTTP 401 Unauthorizedを持っています。さて、私は起こっていたことを見るためにフィドラーをつかんだ。System.Net.WebClientが奇妙に失敗する

しかし、それは私がHeisenbergedを取得したときです - 呼び出しは、今すぐヒッチなしで行った。したがって、認証は接続されたFiddlerを経由しますが、認証がなければ失敗します。 Webクライアントが壊れているのですか?

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、その前に1を聞いたことがありません! –

答えて

4

は、このリンクを見てみましょう:
HTTP Authorization and .NET WebRequest, WebClient Classes

私はあなたと同じ問題を抱えていました。私は1行追加して、それが動作するようになった。次のようにこの

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; 

また、正しいユーザー名、パスワード、ドメインをお持ちですか?

また、フィドラーがいくつかのユニコード文字を改変しているのだろうか。ユーザー/パス/ドメインにユニコードがある場合は、"☺"の代わりに"\u2638"のようにエスケープしてみてください。

+3

同僚と同様の問題で作業しているときに、フィドラーがローカルの資格情報でWebサービスにアクセスしていると判断しました。Asp.Netアプリケーションのコードはasp.netユーザーの資格情報を使用するため、アクセス権を持っています。 – travis

2

は問題が解決しない場合は、 "交渉" と "基本" を交換してみ

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

...これを試してみてください。

1

を試してみてください私は、CredentialCacheオブジェクトを使用して、このエラーを回避することができました:動詞としてハイゼンベルグuncertaintly原理を利用するための

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)); 
関連する問題