2009-06-10 14 views
7

मैं एक ऐसे वेब पेज के भीतर कोड का एक टुकड़ा चला रहा हूं जो एडीएसआई का उपयोग कर आईआईएस मेटाबेस का सवाल उठाता है। कोड इस के रूप में सरल है:क्या आईआईएस पर विशेष उन्नत विशेषाधिकारों के साथ DefaultAppPool चलाता है?

 DirectoryEntry iisNode = 
     new DirectoryEntry("/LM/W3SVC/1/ROOT/MyAspWebsite-1-128886021498831845"); 
     foreach (DirectoryEntry de in iisNode.Parent.Children) 
     { 
      System.Console.WriteLine(de.Name); 
     } 

यह ठीक काम करता है जब मैं IIS7/W2K8 पर DefaultAppPool तहत पृष्ठ/साइट चलाते हैं। लेकिन जब मैं अपने खुद के एप्लिकेशन पूल बना सकते हैं और एप्लिकेशन पूल डिफ़ॉल्ट के रूप में गुण ही छोड़ देते हैं, इस कोड को निम्न त्रुटि के साथ विफल:

Caught: System.Runtime.InteropServices.COMException 
Failed to parse virtual directory: 
     /LM/W3SVC/1/ROOT/MyAspWebsite-1-128889542757187500 
System.Runtime.InteropServices.COMException (0x80070005): Access is denied. 

DefaultAppPool क्या विशेषाधिकार है? मुझे कोई दस्तावेज नहीं दिख रहा है। मुझे इसे गैर-डिफ़ॉल्ट ऐप पूल में काम करने की आवश्यकता है, लेकिन बिना पूरे कार्यकर्ता प्रक्रिया को उन्नत विशेषाधिकार प्रदान करते हैं। मैंने आईआईएस 7 चालू होने वाली मशीन पर व्यवस्थापक का उपयोग करके DirectoryEntry कन्स्ट्रक्टर के उपयोगकर्ता नाम और पासवर्ड पैरामीटर का उपयोग करने का भी प्रयास किया है, लेकिन इससे कुछ भी नहीं बदला है। मैं यह भी ध्यान दूंगा कि यह IIS6 और W2K3 पर ठीक काम करता है।

किसी भी मदद की सराहना की जाती है।

+0

क्या आप वाकई एक ही पहचान के तहत दोनों ऐप पूल चल रहे हैं? – kemiller2002

+0

हां, यदि आप प्रक्रिया एक्सप्लोरर में देखते हैं, तो वे दोनों एनटी प्राधिकरण \ नेटवर्क्स सेवा के रूप में चल रहे हैं, और दोनों में "सिस्टम" की एकता है। आप w3wp.exe के दोनों मामलों की उन्नत प्रॉपर्टी के लिए संसाधन एक्सप्लोरर के तहत सुरक्षा टैब को देखें, तो वे केवल एक ही अंतर के साथ समूहों की सटीक एक ही सेट के हैं, DefaultAppPool IIS AppPool \ DefaultAppPool समूह का हिस्सा है, और कस्टम ऐप पूल IIS APPPOOL \ CustomAppPool समूह से संबंधित है। –

+0

जब आप कहते हैं कि आपने अपना ऐप-पूल बनाया है, तो क्या आप बस एक नया ऐप-पूल बना रहे हैं और अपना मौजूदा ऐप जोड़ रहे हैं और यह असफल रहा है? या, क्या आप एक पूरी तरह से नई साइट (और इस प्रकार, रूट पर शायद एक ऐप) बना रहे हैं जो नए ऐप पूल से जुड़ा हुआ है? शायद अनुमति समस्या आपके पथ/एलएम/डब्ल्यू 3 एसवीसी/1/रूट में साइट आईडी 1 के संदर्भ के कारण है ...? – Aaron

उत्तर

2

शायद आपको विश्वास नहीं हो सकता है, लेकिन वास्तविक पहचान के लिए अपने कोड चल प्रक्रिया एक्सप्लोरर में w3wp.exe के लिए सूचीबद्ध एक के रूप में एक ही नहीं हो सकता। आपको ब्रेकपॉइंट सेट करना चाहिए या कोड की अपमानजनक रेखा (DirectoryEntry.Parent.Children) के पास WindowsIdentity.GetCurrent().Name चलाएं जो COMException/"एक्सेस अस्वीकृत" उल्लंघन को फेंकता है।

उदाहरण के लिए, मेरे लिए, मेरी ऐप पूल प्रक्रिया, w3wp.exe, कार्य प्रबंधक विंडो में NETWORK SERVICE के रूप में चल रहा था, जैसा कि आपने ऊपर वर्णित किया है। हालांकि, जब मैं वास्तविक क्रम पहचान की जाँच की, यह पता चला कि यह नए IIS7 अंतर्निहित उपयोगकर्ता IUSR, जो मूल्य मैं IIS6 में प्राप्त होता है, जो NETWORK SERVICE था से अलग था।

using System.Security.Principal; 

Console.WriteLine(
    WindowsIdentity.GetCurrent().Name); // IUSR on IIS7, NETWORKSERVICE on IIS6 
foreach (var de in DirectoryEntry("/LM/W3SVC/1/ROOT/MySite".Parent.Children)) 
{ 
    System.Console.WriteLine(de.Name); 
} 

ऐसा लगता है कि IIS6 में, नेटवर्क सेवा DirectoryEntry वर्ग के साथ सक्रिय निर्देशिका सेवा इंटरफ़ेस (ADSI) के माध्यम से IIS Metabase पता लगाने के लिए अनुमति थी। हालांकि, आईआईएस 7 में नई आईयूएसआर पहचान नहीं है। उपरोक्त कोड को चलाने के लिए है, तो आप सीधे impersonate an account मौजूदा साथ ADSI विशेषाधिकार को पढ़ने के लिए, उदाहरण के लिए होगा:

using (new MyImpersonationWrapper("admin","pass")) 
{ 
    foreach (var de in DirectoryEntry("/LM/W3SVC/1/ROOT/MySite".Parent.Children)) 
    { 
     System.Console.WriteLine(de.Name); 
    } 
} 

अपने स्वयं के प्रतिरूपण आवरण को लागू करने और एक उचित स्थानीय खाते को सुरक्षित एक व्यायाम मैं करने के लिए छोड़ देंगे है आप, क्योंकि आपकी (सुरक्षा) जरूरतों में भिन्नता हो सकती है।

वैकल्पिक रूप से, suggested on this MSDN blog post के रूप में, WMI provider for IIS7 का उपयोग करके आप अपनी वांछित जानकारी को देखने में सक्षम होना चाहिए।

-2

मैं उस पथ की जांच करूंगा जिस पर आप निर्देशिका प्रविष्टि तक पहुंच रहे हैं। यह संभव है कि आपके पास कुछ विवादित सेवा हो। अपने इवेंट व्यूअर की जांच करें।

यह लिंक कोई है जो एक ऐसी ही समस्या थी और पाया कि because Skype was running on port 80 it was causing a conflict with the path.

लेकिन आपके सवाल का असली जवाब है, "नहीं, नहीं कुछ भी एप्लिकेशन पूल डिफ़ॉल्ट के बारे में क्या खास बात है" को जाता है।

+0

क्या आप रास्ता है कि मैं पर निर्देशिका प्रविष्टि तक पहुँचने कर रहा हूँ मतलब है? पथ आईआईएस मेटाबेस के लिए है। बंदरगाहों के साथ क्या करना है? आईआईएस 7 में मेटाबेस को एक्सएमएल फाइलों में संग्रहीत किया जाता है जैसा कि मैं समझता हूं। –

+0

लिंक मैं में डाल संकेत दिया कि पोर्ट 80 पर कुछ और होने को बढ़ा सकता है/1/अपने रास्ते में है कि –

-2

मैं यह सुनिश्चित करने के लिए जांचूंगा कि NetWorkServices उपयोगकर्ता के पास भौतिक निर्देशिकाओं तक पहुंच है जो वह एक्सेस करने का प्रयास कर रहा है। यह त्रुटि से प्रकट होता है कि आप उस काम के तहत विभिन्न साइटों तक पहुंच रहे हैं जो काम करता है और जो नहीं करता है, क्या यह सही है?

जैसा कि पिछले उपयोगकर्ता द्वारा बताया गया है, डिफ़ॉल्ट ऐपपूल और आपके द्वारा बनाए जाने वाले किसी भी चीज़ के बारे में कुछ खास नहीं है (जब तक आप कस्टम ऐपपूल की सेटिंग्स नहीं बदलते। आईआईएस ऐपपूल को चलाने के लिए जो भी उपयोगकर्ता सेटअप है, उसकी अनुमतियों का उपयोग करता है।

0

यह अपने वर्णन से बताने के लिए वास्तव में क्या है, लेकिन से चल रहा हो सकता है कि मैं क्या समझते हैं कि आप इस तरह एक सेटअप है एक छोटे से कठिन है:

DefaultWebSite 
    | 
    +-- VirtualDirectory 
     | 
     +-- ShowIISMetaData.aspx 

मुझे लगता है कि समस्या यह है कि पेज है कि माना जाता है आईआईएस मेटाडाटा को अपने माता-पिता के बच्चों को देखने का प्रयास कर रहा है (में दूसरे शब्दों में इसके भाई बहनें)।

foreach (DirectoryEntry de in iisNode.Parent.Children) 

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

0

इस मुद्दे से कुछ जानकारी गायब है। दोनों खाते एक ही उपयोगकर्ता खाते के तहत चल रहे हैं, इसलिए व्यवहार एक जैसा होना चाहिए। मेरा सुझाव है कि आप आईआईएस के वेनिला इंस्टॉलेशन के तहत कोड चलाने का प्रयास करें, क्या समस्या अभी भी होती है?

जैसा कि अन्य लोगों ने संकेत दिया है, यदि खाते समान हैं, तो ऐसा इसलिए है क्योंकि आपने मेटाबेस का कुछ संशोधन किया है।

0

ऐप पूल से जुड़े प्रमाण-पत्र एडी पूछने का प्रयास करते समय उपयोग किए जाएंगे।तो यदि दोनों ऐप पूल समान प्रमाण-पत्रों के तहत चल रहे हैं जो आपकी समस्या नहीं है।

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

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

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