2009-04-26 9 views
12

विफल रहता है मैं अपने TFS सर्वर पर रिपोर्टिंग सेवा उदाहरण से कुछ डेटा डाउनलोड करने का प्रयास कर रहा हूं।
यह देखते हुए कि कोड उस कंप्यूटर पर चलाना चाहिए जो डोमेन में शामिल नहीं है, मुझे लगा कि मैं खुद को प्रमाण-पत्र सेट कर दूंगा। कोई भाग्य नहीं, एक HTTP 401 अनधिकृत वापस मिला। ठीक है, इसलिए मैंने यह देखने के लिए फिडलर को लगाया कि क्या हो रहा था।System.Net.WebClient अजीब रूप से

लेकिन जब मुझे Heisenberged मिला - कॉल अब बिना किसी हिचकिचाहट के चला गया। तो प्रमाणीकरण फिडलर से जुड़ा हुआ है, लेकिन इसके बिना विफल रहता है। क्या वेब क्लाइंट टूटा हुआ है या क्या मुझे यहां कुछ गहराई याद आ रही है?

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 एक क्रिया के रूप हाइजेनबर्ग uncertaintly सिद्धांत का उपयोग कर के लिए, पहले कभी नहीं सुना है कि एक! –

उत्तर

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; 

साथ ही, क्या आप सुनिश्चित हैं कि आपके पास सही उपयोगकर्ता नाम, पासवर्ड और डोमेन है?

इसके अलावा: मुझे आश्चर्य है अगर फ़िडलर कुछ यूनिकोड वर्ण के चारों ओर बदल रहा है जब .net उन्हें या ऐसा ही कुछ टूट जाता है। यदि आपके उपयोगकर्ता/पास/डोमेन में यूनिकोड है, तो "☺" के बजाय "\u2638" जैसे इसे से बचने का प्रयास करें।

+3

जब एक सहकर्मी के साथ एक समान मुद्दा के माध्यम से काम अभी हमने पाया कि Fiddler अपने स्थानीय साख के साथ वेब सेवा तक पहुंच गया था, जहां एक 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 वस्तु का उपयोग करके इस त्रुटि से बचने के लिए कर रहा था का प्रयास करें:

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)); 
संबंधित मुद्दे