2009-06-23 15 views
12

के साथ काम नहीं करता है। मैं एक आईआईएस 6 सर्वर में फ़ाइल अपलोड करने के लिए WinForms एप्लिकेशन में System.Net.WebClient का उपयोग करने का प्रयास कर रहा हूं जिसमें Windows प्रमाणीकरण है, यह केवल 'प्रमाणीकरण' विधि है।System.Net.WebClient विंडोज प्रमाणीकरण

WebClient myWebClient = new WebClient(); 
myWebClient.Credentials = new System.Net.NetworkCredential(@"boxname\peter", "mypassword"); 
byte[] responseArray = myWebClient.UploadFile("http://localhost/upload.aspx", fileName); 

मैं एक 'दूरस्थ सर्वर ने एक त्रुटि दिखाई: (401) अनधिकृत' मिलता है, वास्तव में यह एक 401,2

दोनों ग्राहक है और आईआईएस एक ही विंडोज सर्वर 2003 देव मशीन पर कर रहे हैं।

जब मैं फ़ायरफ़ॉक्स में पृष्ठ खोलने की कोशिश करता हूं और कोड में समान सही प्रमाण-पत्र दर्ज करता हूं, तो पृष्ठ आता है। हालांकि IE8 का उपयोग करते समय, मुझे वही 401.2 त्रुटि मिलती है।

क्रोम और ओपेरा का प्रयास किया और वे दोनों काम करते हैं।

आईई इंटरनेट विकल्पों में सक्षम 'एकीकृत विंडोज प्रमाणीकरण सक्षम करें' है।

सुरक्षा ईवेंट लॉग एक विफलता लेखा परीक्षा है:

Logon Failure: 
    Reason:  An error occurred during logon 
    User Name: peter 
    Domain:  boxname 
    Logon Type: 3 
    Logon Process: ÈùÄ 
    Authentication Package: NTLM 
    Workstation Name: boxname 
    Status code: 0xC000006D 
    Substatus code: 0x0 
    Caller User Name: - 
    Caller Domain: - 
    Caller Logon ID: - 
    Caller Process ID: - 
    Transited Services: - 
    Source Network Address: 127.0.0.1 
    Source Port: 1476 

मैं जांच करने के लिए प्रक्रिया की निगरानी और फ़िडलर थे, लेकिन कोई लाभ नहीं हुआ।

यह तृतीय पक्ष ब्राउज़र के लिए क्यों काम करेगा, लेकिन IE या System.Net.WebClient के साथ नहीं?

+0

बेसिक करने के लिए एकीकृत Windows से IIS में एक प्रमाणीकरण विधि बदलने के बाद यह काम करता है, लेकिन यह मेरी समस्या का समाधान नहीं करता क्योंकि मैं उत्पादन सर्वर पर कि सेटिंग नहीं बदल सकते। –

+0

मैंने प्रक्रिया की निगरानी करने के लिए आईआईएस 'प्रमाणीकरण और एक्सेस कंट्रोल डायग्नोस्टिक्स टूल' का उपयोग किया और आईई के लिए फ़ायरफ़ॉक्स के लिए लॉग की तुलना की। एनटीएलएम चुनौती/प्रतिक्रिया विफल होने तक यह ठीक लगता है, लेकिन यह मुझे कोई संकेत नहीं देता है कि यह क्यों करता है। –

+0

मैंने कुछ और परीक्षण किया: ऊपर वर्णित 2003 सर्वर वर्चुअल पीसी में वास्तव में एक वीएम है, मेजबान मशीन से IE का उपयोग करते समय मैं प्रमाणीकृत कर सकता हूं, लेकिन अतिथि पर IE का उपयोग नहीं कर सकता। हालांकि मेजबान फ़ाइल के माध्यम से सेटअप होस्टनाम के बजाए साइट के आईपी पते का उपयोग करते समय अतिथि के आईई कार्यों का उपयोग करते समय। यहाँ टूटी हुई बातें! मुझे खुशी है कि यह एक उत्पादन सर्वर पर नहीं है। –

उत्तर

18

मैंने एक समान समस्या देखी है, जहां एकीकृत/एनटीएलएम सुरक्षा केवल तभी काम करेगी जब आप मेजबान का उपयोग मशीन नाम या लोकलहोस्ट द्वारा कर रहे हों। वास्तव में, यह विंडोज़ में एक [खराब] दस्तावेज़ सुविधा है जिसे "प्रतिबिंब हमलों" से बचाने के लिए डिज़ाइन किया गया है।

असल में, आपको उस मशीन पर रजिस्ट्री कुंजी बनाने की आवश्यकता है जो सर्वर तक पहुंचने का प्रयास कर रहा है, और जिस डोमेन को आप हिट करने का प्रयास कर रहे हैं उसे श्वेतसूची में डालें। प्रत्येक होस्ट नाम/एफक्यूडीएन को अपनी लाइन पर होना चाहिए - कोई वाइल्डकार्ड नहीं है और नाम बिल्कुल मेल खाना चाहिए। केबी से आलेख:

  • प्रारंभ क्लिक करें, चलाएँ क्लिक करें, regedit टाइप करें, और उसके बाद ठीकक्लिक करें।
  • रजिस्ट्री संपादक में, का पता लगाने और उसके बाद निम्न रजिस्ट्री कुंजी क्लिक करें: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0
  • MSV1_0, न्यू इंगित राइट-क्लिक करें, और उसके बाद बहु स्ट्रिंग मान।
  • टाइप BackConnectionHostNames, और फिर ENTER दबाएं।
  • पर राइट-क्लिक करें BackConnectionHostNames, और उसके बाद संशोधित करेंक्लिक करें।
  • वैल्यू डेटा बॉक्स में, स्थानीय कंप्यूटर पर मौजूद साइटों के लिए होस्ट नाम या होस्ट नाम टाइप करें और फिर ठीक क्लिक करें।
  • रजिस्ट्री संपादक से बाहर निकलें, और उसके बाद कंप्यूटर को पुनरारंभ करें।

http://support.microsoft.com/kb/956158/en-us

+3

+10 अगर मैं इसे 10 बार ऊपर उठा सकता हूं तो मैं चाहता हूं। मेरे 3 दिनों के सिर खरोंच और गूगलिंग समाप्त हो गया। – DancesWithBamboo

+0

+20 अगर मैं कर सकता तो मैं इस 20 बार ऊपर उठ जाऊंगा। –

4

आप की कोशिश की है ...

new NetworkCredential("peter", "password", "boxname"); 

तुम भी कोशिश कर सकते हैं ...

var credCache = new CredentialCache(); 
credCache.Add(new Uri ("http://localhost/upload.aspx"), 
       "Negotiate", 
       new NetworkCredential("peter", "password", "boxname")); 
wc.Credentials = credCache; 

इसके अलावा, this के अनुसार हो सकता है कि आईआईएस गलत कॉन्फ़िगर किया गया है। उपर्युक्त में "बेसिक" के साथ "बातचीत" को बदलने और वेबसाइट के लिए अपनी आईआईएस कॉन्फ़िगरेशन की जांच करने का प्रयास करें। here संभावित कारणों का भी एक गुच्छा है।

+0

बस कोशिश की, उसी 401.2 प्रतिक्रिया और 'विफलता लेखापरीक्षा' –

+0

ने भी 'वार्तालाप' संस्करण का प्रयास किया, वही परिणाम। मुझे क्या buffles है कि आईई में भी काम नहीं करता है। –

0

अपने आईआईएस तैनाती जानते हुए भी, और यह सोचते हैं आप IIS में सेट अपलोड करने के लिए सही प्राधिकरण नियम है कि बिना, (उदाहरण के लिए सही अनुमति देते हैं * एसीएल सही dirs आप के लिए सामग्री, आदि को अपलोड करने की कोशिश कर रहे हैं पर की) पहली बात मैं करूंगा स्पष्ट रूप से सेट प्रमाणीकरण सेट करने के बजाय UseDefaultCredentials को सत्य पर सेट करने का प्रयास करें। (हो सकता है कि आपको लगता है कि आप जिस सर्वर को सेट कर रहे हैं उसके साथ सर्वर तक पहुंच रहे हैं लेकिन यह मामला नहीं है? यह संभव होगा यदि यह काम करता है।)

यह एक बहुत ही आम परिदृश्य है, इसलिए मैं आईआईएस प्रमाणीकरण नियमों पर ध्यान केंद्रित करूंगा निर्देशिका जिसमें आप फ़ाइल को अपलोड करने का प्रयास कर रहे हैं, उस निर्देशिका पर वास्तविक एसीएल। पूर्व के लिए क्या आपकी साइट प्रतिरूपण कर रही है या नहीं? यदि ऐसा है, तो आपको उस डीआईआर पर वास्तविक एसीएल होना चाहिए, अन्यथा जो भी खाता ऐप पूल चल रहा है।

+0

मुझे नहीं लगता कि यह एक एसीएल समस्या है क्योंकि यह अब तक नहीं मिलता है, प्रक्रिया मॉनिटर लक्ष्य निर्देशिका पर कोई गतिविधि नहीं दिखाता है। –

+0

बस इसे UseDefaultCredentials के साथ आज़माएं, असफल भी। मुझे इसे गैर-डिफ़ॉल्ट क्रेडेंशियल के साथ काम करने की आवश्यकता है क्योंकि विंडोज उपयोगकर्ता उत्पादन में क्लाइंट और सर्वर मशीनों पर अलग हैं। –

1

आईई के विकल्पों में जाने का प्रयास करें और स्पष्ट रूप से साइट को इंट्रानेट जोन में जोड़ें। फिर कार्यक्रम को फिर से चलाएं। आपको प्रोग्राम लॉगिन व्यवस्थापक से भी नहीं चलाया जाना चाहिए। यह Enhanced Security Configuration for Internet Explorer ट्रिगर कर सकता है।

यह समझा सकता है कि आप फ़ायरफ़ॉक्स और ओपेरा के साथ साइट क्यों मार सकते हैं, लेकिन IE या WebClient के साथ नहीं।

+0

अच्छे विचार, मैंने दोनों की कोशिश की लेकिन यह अभी भी काम नहीं करता है। –

संबंधित मुद्दे