IIS7 के साथ c #/asp.net वेबपृष्ठ के माध्यम से आभासी निर्देशिका (मैप किए गए ड्राइव) तक पहुंच

तो मेरे पास एक सर्वर ए और सर्वर बी है

सर्वर ए: विंडोज सर्वर 2008R2 सर्वर बी: विंडोज सर्वर 2003

वेब पेज फ्रेमवर्क 4.0 का उपयोग कर रहा है, जिसे वीएस2013 प्रो आरसी के साथ बनाया गया है

सर्वर पर एक मेरा asp.net/c# वेबपृष्ठ IIS7 पर चल रहा है सर्वर बी पर मेरे पास एक साझा फ़ोल्डर है।

अब मैंने सर्वर बी से सर्वर ए से इस साझा फ़ोल्डर को मैप किया है, और यह डेस्कटॉप \ विंडोज एक्सप्लोरर के माध्यम से पूरी तरह से सुलभ है, हालांकि वेबपृष्ठ से फ़ोल्डर तक पहुंच एक अलग कहानी है।

फ़ोल्डर तक पहुंचने के लिए, मैंने आईआईएस 7 में क्या किया है, उसी वेबपृष्ठ के तहत वर्चुअल फ़ोल्डर बनाएं, और इसे मैप किए गए ड्राइव पर इंगित करें।

यह निश्चित रूप से काम करेगा यदि फ़ोल्डर एक ही सर्वर ए पर होता, लेकिन चूंकि यह एक अलग सर्वर बी पर है, तो मुझे निम्न त्रुटि मिलती है।

पथ 'एल: \ a \ b \ file.pdf' का एक हिस्सा नहीं मिला अब पथ 100% सही है, क्योंकि मैंने जांच की है।


कुछ अतिरिक्त डीबग जानकारी है:

'एल: \ a \ b \ file.pdf' पथ का एक हिस्सा नहीं मिला।

विवरण: वर्तमान वेब अनुरोध के निष्पादन के दौरान एक अनचाहे अपवाद हुआ। त्रुटि के बारे में अधिक जानकारी के लिए और जहां यह कोड में उत्पन्न हुआ, कृपया स्टैक ट्रेस की समीक्षा करें।

अपवाद विवरण: System.IO.DirectoryNotFoundException: नहीं कर सका   पथ 'एल: \ a \ b \ file.pdf' का एक हिस्सा ढूंढें।

     

स्रोत त्रुटि:

     

निष्पादन के दौरान एक अनचाहे अपवाद उत्पन्न हुआ था   वर्तमान वेब अनुरोध। मूल और स्थान के बारे में जानकारी   अपवाद को नीचे अपवाद स्टैक ट्रेस का उपयोग करके पहचाना जा सकता है।

     

स्टैक ट्रेस: ​​

     

[DirectoryNotFoundException: पथ का एक हिस्सा नहीं मिला   'एल: \ ए \ बी \ file.pdf'।] System.IO .__ त्रुटि। WinIOError (Int32 त्रुटि कोड,   स्ट्रिंग हो सकता है फुलपाथ) +216 System.IO.FileStream.Init (स्ट्रिंग पथ,   फ़ाइल मोड मोड, फ़ाइल एक्सेस एक्सेस, Int32 अधिकार, बूलियन उपयोग राइट्स,   फाइलशेयर शेयर, इंट 32 बफर आकार, फाइलऑप्शन विकल्प,   सुरक्षा_एट्रिब्यूट्स सेकेटर्स, स्ट्रिंग msgPath, बूलियन bFromProxy,   बूलियन उपयोग लोंगपाथ) +2481 System.IO.FileStream..ctor (स्ट्रिंग पथ,   फ़ाइल मोड मोड, फ़ाइल एक्सेस एक्सेस, फ़ाइलशेयर शेयर, Int32 बफर आकार,   FileOptions विकल्प, स्ट्रिंग msgPath, बूलियन bFromProxy) +229
  System.IO.FileStream..ctor (स्ट्रिंग पथ, फ़ाइल मोड मोड, फ़ाइल एक्सेस   एक्सेस, फाइलशेयर शेयर) +102
  System.Web.HttpResponse.WriteFile (स्ट्रिंग फ़ाइल नाम, बूलियन   readIntoMemory) +166 Reloc.Client.Contracts.openLink क्लिक करें (ऑब्जेक्ट   प्रेषक, EventArgs ई) सी: \ उपयोगकर्ता \ एक्स \ दस्तावेज़ \ विजुअल स्टूडियो में   2013 \ परियोजनाओं \ p \ p \ एस \ Listdoc.aspx.cs: 230
  System.Web.UI.WebControls.GridView.HandleEvent (EventArgs ई, बूलियन   कारण सत्यापन, स्ट्रिंग सत्यापन समूह) +11 9 2
  System.Web.UI.WebControls.GridViewRow.OnBubbleEvent (ऑब्जेक्ट स्रोत,   EventArgs ई) +164 सिस्टम.Web.UI.Control.RaiseBubbleEvent (ऑब्जेक्ट   स्रोत, EventArgs तर्क) +52
  System.Web.UI.Page.ProcessRequestMain (बूलियन   includeStagesBeforeAsyncPoint, बूलियन शामिल StagesAfterAsyncPoint)   3707


मुझे अनुमति है कि इस अनुमति या संबंधित के साथ कुछ करने के लिए हो सकता है, भाग्य के बिना, कई चीजों की कोशिश की है। तो कृपया मुझे यहां मदद करें। अग्रिम में धन्यवाद।

11

3 उत्तर

जैसा कि वाटा सुझाव देता है, प्रत्येक उपयोगकर्ता को अपने मैप किए गए ड्राइव मिलते हैं। इसका मतलब है कि आपका एल: ड्राइव आपके ऐप पूल खाते के एल: ड्राइव जैसा नहीं है।

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

एक बार जब आप नई सक्रिय निर्देशिका "सेवा खाता" बनाते हैं (भविष्य में परेशानी से बचने के लिए, सुनिश्चित करें कि पासवर्ड समाप्त नहीं होता है), तो आप आईआईएस में अपनी ऐप पूल की पहचान बदलना चाहेंगे। एप्लिकेशन पूल पर जाएं, अपनी साइट द्वारा उपयोग में ऐप पूल ढूंढें, इसे चुनें और दाईं ओर उन्नत सेटिंग्स चुनें, पहचान पर जाएं, और कस्टम खाता सेट करने के लिए ... बटन पर क्लिक करें, उपयोगकर्ता नाम को उपसर्ग करना सुनिश्चित करें डोमेन नाम: mydomain \ myserviceusername।

आप सर्वर बी के शेयर में अपने सेवा खाते तक पहुंच भी देना चाहेंगे।

अब आपको अपने सेवा खाते का उपयोग कर सर्वर ए से सर्वर बी तक लगातार मैप किए गए ड्राइव को बनाने की आवश्यकता होगी। विवरण के लिए यह देखें, एक स्क्रिप्ट सेट अप करना सुनिश्चित करें जो एक आदेश का उपयोग कर रीबूट के बाद ड्राइव को रीमेप करता है जैसे <�कोड > शुद्ध उपयोग एल: \\ सर्वरबी \ साझा किया गया/लगातार: हाँ , सुनिश्चित करें कि यह आपके सेवा खाते के रूप में चलाया गया है। आप संभावित रूप से अपने ऐप के Global.asax.cs एप्लिकेशन_स्टार्ट में यह पहली चीज़ भी चला सकते हैं। यदि आप इस पैराग्राफ में चरणों की परेशानी से बचना चाहते हैं, तो मैप किए गए ड्राइव का उपयोग करने के बजाय पूर्ण यूएनसी पथ का उपयोग करने के वाटा के सुझाव का उपयोग करें।

Now your web app should be able to access the shared folder on Server B. :-)

10
जोड़ा
विस्तृत स्पष्टीकरण के लिए धन्यवाद, जो आवंटित किया गया है, और मुझे लगता है कि हम जल्द ही काम कर रहे हैं, बस व्यवस्थापक से कुछ अनुमतियों की प्रतीक्षा कर रहे हैं।
जोड़ा लेखक Mana, स्रोत

समस्या यह है कि यदि आप मैप किए गए ड्राइव को बनाते हैं तो यह केवल उस उपयोगकर्ता को दिखाई देता है जिसने इसे बनाया है। चूंकि आपके एप्लिकेशन का आईआईएस एप्लीकेशन पूल शायद एक अलग उपयोगकर्ता के तहत चलता है, इसलिए यह मैप किया गया ड्राइव इसके लिए अदृश्य है। (एक अलग उपयोगकर्ता खाते के तहत ऐप चलाना एक अच्छी सुरक्षा अभ्यास है)

मैं निम्नलिखित का सुझाव देता हूं: वर्चुअल निर्देशिका के लिए मैप किए गए ड्राइव का उपयोग करने के बजाय, यूएनसी पथ का उपयोग करने का प्रयास करें। उदाहरण के लिए: "दस्तावेज़" नामक वर्चुअल निर्देशिका बनाएं जो \\ सर्वरबी \ a \ b पर नक्शा बनाती है। फिर आप "फाइल/file.pdf" के साथ अपनी फाइल तक पहुंचने में सक्षम होना चाहिए। ध्यान रखें कि एप्लिकेशन के आईआईएस एप्लिकेशन पूल उपयोगकर्ता को नेटवर्क शेयर \\ सर्वरबी \ और उपफोल्डर्स और फ़ाइलों की आवश्यकता होती है जो आपको चाहिए।

5
जोड़ा
उन लोगों के लिए जिन्हें मैप किए गए ड्राइव के यूएनसी (यूनिवर्सल नेमिंग कन्वेंशन) को खोजने की आवश्यकता है, प्रति stackoverflow.com/questions/21482825/…
जोड़ा लेखक Tony L., स्रोत

सर्वर पर फ़ोल्डर की अनुमतियों की जांच करें और सुनिश्चित करें कि साइट के एप्लिकेशन पूल में इसका उपयोग है।

2
जोड़ा
क्या आप मुझे बता सकते हैं कि मैं साइट के एप्लिकेशन पूल को अनुमति कैसे दे सकता हूं, या मुझे कुछ भी संदर्भित कर सकता हूं जहां मैं इसके बारे में पढ़ सकता हूं?
जोड़ा लेखक Mana, स्रोत
क्या आप साझा फ़ोल्डर पर अनुमतियों के बारे में बात कर रहे हैं? और मुझे सर्वर ए या बी पर अनुमतियां बदलनी होंगी
जोड़ा लेखक Mana, स्रोत