2008-12-02 18 views
8

मैं एक ASP.NET वेब अनुप्रयोग जो निम्नलिखित करता है:ASP.NET: System.UnauthorizedAccessException - पथ के लिए प्रवेश निषेध

  1. Excel फ़ाइल पढ़ता है।
  2. एक्सेल फ़ाइल में एक छवि यूआरएल होगा जो इंटरनेट पर कहीं भी इंगित करता है।
  3. प्रोग्राम प्रत्येक छवि यूआरएल पढ़ता है और इसे वेब सर्वर में अस्थायी फ़ोल्डर में संग्रहीत करता है।
  4. एप्लिकेशन तब छवि का आकार बदलता है (चौड़ाई और ऊंचाई बदलता है)।
  5. अंत में, एप्लिकेशन उस छवि को किसी अन्य फ़ोल्डर में सहेज लेगा।

    मैं निम्नलिखित अपवाद हो रही है:

System.Net.WebException: एक अपवाद एक WebClient अनुरोध के दौरान हुई। ---> सिस्टम। अनधिकृत एक्सेस अपवाद: पथ '\ abcserver \ target03 \ 3111 \ 35644 \ www.testing.com \ web \ content \ images \ TempStorage \ tempImage.jpg' से इनकार किया गया है। System.IO.FileStream.Init पर System.IO .__ Error.WinIOError (Int32 errorCode, स्ट्रिंग maybeFullPath) (स्ट्रिंग पथ, FileMode मोड, FileAccess का उपयोग, Int32 अधिकार, बूलियन useRights, fileshare शेयर, Int32 bufferSize पर , FileOptions विकल्प, SECURITY_ATTRIBUTES secAttrs, स्ट्रिंग msgPath, System.IO.FileStream..ctor पर बूलियन bFromProxy) ( System.Net.WebClient.DownloadFile में स्ट्रिंग पथ, FileMode मोड, FileAccess पहुँच) (उरी पता, स्ट्रिंग फ़ाइल नाम) --- आंतरिक अपवाद स्टैक ट्रेस के अंत ---
ProcessImage.GetFileFromUrl (स्ट्रिंग imageFileUrl, स्ट्रिंग newFileName)
uploadexceldata.UploadExcelData (स्ट्रिंग फ़ाइल का नाम) में कम से

foreach (DataRow dr in dt.Rows) // Reading each excel row 
      { 

       if (dr[0].ToString() != "") 
       { 
        id= ""; 
        path = ""; 
        manuId = ""; 


        id= dr[0].ToString(); 
        path = dr[1].ToString(); 
        fileNameOnly = iProImg.GetFileNameOnly(path); 
        objDb.openConnection(); 
        strSqlGroupInfo = "select ManufacturerID from manufacturers where id='" + id+ "'"; 

        dTblManu = objDb.BuildDT(strSqlGroupInfo); // To Fill data to Datatable 
        objDb.closeConnection(); 
        if (dTblManu.Rows.Count > 0) 
        { 
         manuId = dTblManu.Rows[0][0].ToString(); 
        } 

        if (manuId != "") 
        { 
         tempUploadPath = "images/TempStorage/"; 
         tempUploadPath = Server.MapPath(tempUploadPath); 
         if (!Directory.Exists(tempUploadPath)) 
         { 
          Directory.CreateDirectory(tempUploadPath); 
         } 
         tempFilePath = tempUploadPath + "\\tempImage.jpg"; 
         tempFilePath = tempFilePath.Replace("/", "\\"); 

         previewPath = Server.MapPath("images/previews/" + manuId); 
         thumbNailPath = Server.MapPath("images/thumbnails/" + manuId); 

         if (!Directory.Exists(previewPath)) 
         { 
          Directory.CreateDirectory(previewPath); 
         } 
         if (!Directory.Exists(thumbNailPath)) 
         { 
          Directory.CreateDirectory(thumbNailPath); 
         } 
         fileNameOnly = "\\preview" + id+ ".jpg"; 
         fileNameOnly = fileNameOnly.Replace("/", "\\"); 
         previewPath = previewPath + fileNameOnly; 
         tempPartialPathP = "images\\previews\\" + manuId + fileNameOnly; 

         fileNameOnly = "\\thumbnail" + id+ ".jpg"; 
         thumbNailPath = thumbNailPath + fileNameOnly; 
         tempPartialPathT = "images\\thumbnails\\" + manuId + fileNameOnly; 


         try 
         { 

          iProImg.GetFileFromUrl(path, tempFilePath); 
          rowCounter++; 
          iProImg.ReSizeImage(tempFilePath, previewPath, previewSize); 
          iProImg.ReSizeImage(previewPath, thumbNailPath, thumbNailSize); 

         } 
         catch (Exception ec) 
         { 

          errorRowCount++; 
          iLog.LogErrorToFile("uploadExcel", ec.ToString(), "path : " + path + ",tempFilePath :" + tempFilePath); 


         } 
         finally 
         { 
          if(File.Exists(tempFilePath)) 
          { 
          File.Delete(tempFilePath); 
          } 
         } 
        } // If manuid!="" 
       } //if (dr[0].ToString() != "") 

किसी को कैसे इस अपवाद को ठीक करने के बारे में कोई सुझाव हैं?

उत्तर

8

नेट उपयोगकर्ता के लिए "पूर्ण नियंत्रण" तक एक्सेस अनुमतियों को सेट करने का प्रयास करें, जहां से आप फ़ाइलों को पढ़ रहे/सहेज रहे हैं।

+0

किसी भी स्क्रिप्ट को .NET उपयोगकर्ता को "पूर्ण नियंत्रण" अनुमतियां सेट करने के लिए? – Kiquenet

+0

मुझे एक ही समस्या थी - यह मेरी अस्थायी निर्देशिका थी जिसमें उचित अनुमति नहीं थी ... – bgmCoder

3

सुनिश्चित करें कि एएसपी.NET खाते ने आपके द्वारा लिखे गए फ़ोल्डर (मूल विंडोज़ सुरक्षा) पर पढ़ने/लिखने की अनुमति पढ़ी है।
कैसे करें: http://www.microsoft.com/windowsxp/using/networking/security/permissions.mspx
(पहले 4 कदम, बॉक्स चेक करें और OK क्लिक करें)

[संपादित करें]
आप दूरस्थ सर्वर पर जाना जाता है एक खाते के साथ अपने आप को प्रमाणित करने के लिए की जरूरत है। आपने शायद दूरस्थ सर्वर पर स्थानीय एएसपी.NET खाते के अधिकार दिए हैं, जो काम नहीं करेगा क्योंकि यह वह उपयोगकर्ता नहीं है जिसके साथ आप फ़ोल्डर (वेबसर्वर से) तक पहुंचते हैं।
[/ संपादित करें]

+0

यह एक दूरस्थ सर्वर है और फ़ोल्डर में पूर्ण पढ़ने/लिखने की अनुमति है। अभी तक काम नहीं कर रहा है – Shyju

+1

आपको स्वयं को प्रमाणित करने की आवश्यकता है रिमोट सर्वर पर ज्ञात खाता। आपने शायद दूरस्थ सर्वर पर स्थानीय एएसपी.NET खाते के अधिकार दिए हैं, जो काम नहीं करेगा क्योंकि यह वह उपयोगकर्ता नहीं है जिसके साथ आप फ़ोल्डर (वेबसर्वर से) तक पहुंचते हैं। –

3

क्या कहा गया था करने के लिए जवाब में: "यह एक दूरस्थ सर्वर और फ़ोल्डर पूर्ण पढ़ने/लिखने की अनुमति से काम नहीं कर granted.Still गया है"

यकीन है कि नेट उपयोगकर्ता/मशीन बनाने खाता उपयोगकर्ता के पास उस फ़ोल्डर के लिए पूर्ण अनुमतियां हैं।

इसके अलावा, आपके कॉन्फ़िग फ़ाइल

3

उपरोक्त सभी को < पहचान /> जोड़ने, प्लस आप इस टैग को जोड़ने की आवश्यकता हो सकती:

<identity impersonate="true" userName="accountname" password="password" /> 

इस KB article पढ़ें और यदि आप ब्राउज़र से जा रहे हैं आईआईएस को एक फ़ाइल शेयर में, जो कि दो हॉप के रूप में गिना जाता है और अब आपको केर्बेरोज प्रतिनिधिमंडल को कॉन्फ़िगर करने की आवश्यकता है। सिस्टम प्रशासक मुझसे ज्यादा चालाक हैं kerberos delegation को कॉन्फ़िगर करने का प्रयास किया है और विफल रहा है। अपनी छवियों या आप आईआईएस उदाहरण ले जाएं ताकि वे एक ही मशीन पर हों।

3

सबसे पहले, अस्थायी रूप से उस विशेष पथ पर हर कोई पूर्ण अनुमति देकर आपकी समस्या को कम। यदि यह काम करता है, तो आप एक तथ्य के लिए जानते हैं कि यह एक साधारण अनुमति मुद्दा है और आपको केवल यह समझने की आवश्यकता है कि किस एक्ट को उचित अनुमति की आवश्यकता है। शायद अनाम उपयोगकर्ता खाता (आईआईएस व्यवस्थापक में इस सेटिंग को दो बार जांचें) और एएसपी.NET खाता नहीं। (सभी के लिए अनुमति खींचने के लिए मत भूलना)

आप के लिए, मेरा मानना ​​है कि आप खाता एक विशेष फ़ाइल तक पहुँचने का प्रयास कर रहा है जो देखने के लिए FileMon उपयोग कर सकते हैं की जरूरत है। गलत हो सकता है, मैंने थोड़ी देर में इस उपकरण का उपयोग नहीं किया है।

एक आखिरी बात ... केवल पढ़ने के लिए झंडा फ़ाइल पर सेट किया गया है? :)

1

चेक कि इमेज फ़ाइल (jpg) आप tempStorage के लिए लिख रहे webuser खाते के लिए उचित अनुमतियां (aspnet या IIS_WPG)। आप सभी बच्चे वस्तुओं पर permisson प्रविष्टियों को प्रतिस्थापित करने के लिए TempStorage निर्देशिका सेट कर सकते हैं।

  1. सही
  2. उन्नत बटन
  3. क्लिक करें दूसरा चेकबॉक्स चेक TempStorage फ़ोल्डर का चयन करें और गुण
  4. क्लिक करें सुरक्षा टैब का चयन करें (उचित पढ़ने सुनिश्चित/लिखने/संशोधित अनुमतियां यहाँ हैं) - अनुमतियों को बदलें यहां दिखाए गए प्रविष्टियों के साथ सभी बाल वस्तुओं पर प्रविष्टियां जो बाल वस्तुओं पर लागू होती हैं।

अब TempStoreage फ़ोल्डर में जो भी फ़ाइलें आप जोड़ते हैं, वे आपको अनुमति देते हैं कि वेबसर्सर खाते jpg फ़ाइल को पढ़ने की अनुमति देता है।

3

मैं आज ठीक उसी समस्या थी। समस्या का कारण बनने के लिए घंटों खर्च करने के बाद मुझे पता चला कि फ़ोल्डर के लिए अनुमतियां गलत थीं। अनिवार्य रूप से, फ़ोल्डर को फ़ाइल बनाने के लिए उपयोग किए जाने वाले उपयोगकर्ता के परिप्रेक्ष्य से पाठक रूप से पढ़ा गया था।

प्रयास करें प्रश्न में फ़ोल्डर के लिए निम्न कार्य:

  1. सही फ़ोल्डर का चयन करें और गुण शेयरिंग टैब पर
  2. क्लिक करें पर क्लिक करें और फिर अनुमतियां बटन पर क्लिक करें
  3. जोड़ने के लिए सुनिश्चित करें जो भी उपयोगकर्ता फ़ोल्डर अनुमतियों को लिखने जा रहा है
  4. गुण पृष्ठ पर वापस, सुरक्षा टैब
  5. पर क्लिक करें सुनिश्चित करें कि जो भी उपयोगकर्ता टी को लिखने जा रहा है वह ऐसा करने के लिए फ़ोल्डर अनुमतियां

इस सवाल को 6 महीने पहले पूछा गया था, मुझे लगता है कि आप पहले ही इस मुद्दे को हल कर चुके हैं ... लेकिन मैंने सोचा कि मैं अपने समाधान को केवल मामले में दस्तावेज करूंगा यह भविष्य में किसी और के लिए उपयोगी हो जाता है क्योंकि वे इस अनधिकृत एक्सेस अपवाद को हल करने का तरीका जानने का प्रयास करते हैं। जब तक मैं खुद के लिए जवाब पर ठोकर खाई

4

दुनिया में कोई उत्तर नहीं मेरे लिए यह हल:

संयुक्त राष्ट्र एन्क्रिप्ट फ़ाइल

आप अपने पूरे हार्ड ड्राइव पर हर किसी के लिए पूर्ण अनुमति प्रदान कर सकते हैं, यह अभी भी ASP.NET फ़ाइलों को डिक्रिप्ट करने की अनुमति नहीं देगा।

यदि आप निश्चित हैं कि फ़ाइल एन्क्रिप्टेड नहीं है, तो आपको केवल उस फ़ाइल या फ़ोल्डर में एएसपीएनईटी खाता जोड़ना होगा, जिसे आप एक्सेस करना चाहते हैं। लेकिन सुनिश्चित करें कि यह पहले एन्क्रिप्टेड नहीं है!

+1

मैंने Google पर हर समाधान की कोशिश करने में घंटों बिताए हैं। वे निन्दा किया गया था! धन्यवाद!!!! (राइट क्लिक-> गुण-> विशेषताओं के बगल में उन्नत बटन -> एन्क्रिप्ट अनचेक करें) –

1

एएसपीएनईटी उपयोगकर्ता को अनुमति देने के बजाय, नेटवर्क सेवा उपयोगकर्ता को अनुमति दें। http://forums.asp.net/t/1013434.aspx/1

0

त्रुटि बहुत स्पष्ट है वहाँ पथ तक पहुंच: फ़ोल्डर के भीतर अनुमतियों को संशोधित करने के लिए पर्याप्त होना चाहिए, पूर्ण अनुमति

अधिक जानकारी के लिए

पढ़ मंच (अधिक अनुमतियों की जरूरत की तुलना में देने के लिए कोई कारण नहीं है) देने के लिए कोई जरूरत नहीं 'bin \ myprojname.pdb \' अस्वीकार कर दिया गया है। उपयोगकर्ता वेब कंसोल प्रक्रिया के तहत चल रहा है (उपयोगकर्ता द्वारा वेबकोनोल, वास्तविक विंडोज उपयोगकर्ता में नहीं बनाया गया), संभवतः "नेटवर्क सेवा" में उस फ़ोल्डर की अनुमति नहीं है।

आप या तो - सही है कि फ़ोल्डर, गोटो अनुमतियाँ पर क्लिक करें और "नेटवर्क सेवा" उपयोगकर्ता को जोड़ने - सही है कि फ़ोल्डर, गोटो अनुमतियाँ पर क्लिक करें और "सभी" उपयोगकर्ता

कि इससे समस्या का समाधान करना चाहिए जोड़ें।

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