2010-08-02 13 views
11

मेरे पास कुछ उत्पादन रनटाइम त्रुटियां हैं जो मैं पूरी तरह समझ नहीं पा रहा हूं। यह हमारे साथ कुछ अलग एएसपी.NET 4.0 वेब साइट्स (shudders पर हुआ है - हाँ, मुझे पता है - हम इसे एमवीसी पर पोर्ट कर रहे हैं लेकिन इसमें कुछ समय लग रहा है)।साइटमैप यादृच्छिक रूप से समय के साथ टूटता है

सबसे पहले, हम कभी भी इस मुद्दे को विकास/क्यूए वातावरण में पुन: उत्पन्न करने में सक्षम नहीं हुए हैं। दूसरा, तैनाती पर, यह मुद्दा अस्तित्व में प्रतीत होता है। कभी-कभी समस्या एक या दो तैनाती के भीतर प्रकट होती है और दूसरी बार तैनाती बिना किसी महीने के रहने के लिए रहती है। हालांकि, एक बार यह प्रकट होता है, तो वेब साइट के नीचे देखा गया कोई भी पृष्ठ त्रुटि का कारण बनता है। आखिरकार, यह समस्या तब सामने आई जब हम .NET 4.0 पर माइग्रेट हो गए। हमने 2.0 साल की शुरुआत की, जो एक साल पहले 3.5 तक बढ़ी थी, और हाल ही में इस समाधान और अधिकांश बाल परियोजनाओं के साथ 4.0 तक पहुंच गई।

त्रुटि: Could not find the sitemap node with URL '~/Default.aspx'.

हमारे साइटमैप का एक सरलीकृत संस्करण (कुछ नामों के साथ बदल गया है और अरुचिकर नोड्स हटाया) निम्नानुसार है:

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"> 
    <siteMapNode roles="*" title="EG"> 
     <siteMapNode url="~/../SM/Default.aspx" title="Welcome" description="" roles="*" /> 
     <siteMapNode url="~/../SD/Default.aspx" title="SD" description="" roles="*" /> 
     <siteMapNode url="~/../SMD/Default.aspx" title="SMD" description="" roles="*" /> 
     <siteMapNode url="~/Default.aspx" title="Ops" description="" roles="*" > 
     <siteMapNode url="~/Error.aspx" title="Error" hide="true" roles="*" /> 
     <siteMapNode url="~/Public/Login.aspx" hide="true" roles="*" /> 
     <siteMapNode url="~/Manager/LPCE.aspx" title="LPCE" description="" roles="Administrator, Manager, System, Marketer" imageUrl="~/../SM/images/icons/LF.jpg" /> 
     </siteMapNode> 
     <siteMapNode url="~/../SDD/Default.aspx" title="SDD" description="" roles="*" /> 
     <siteMapNode url="~/../CCD/Default.aspx" title="CCD" description="" roles="*" /> 
     <siteMapNode url="~/../RD/Default.aspx" title="RD" description="" roles="*"/> 
     <siteMapNode url="~/../SBD/Default.aspx" title="SBD" description="" roles="*" /> 
    </siteMapNode> 
</siteMap> 

इससे हमारे web.config में पंजीकृत है:

<siteMap defaultProvider="SDXmlSiteMapProvider" enabled="true"> 
    <providers> 
    <add name="SDXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="true" /> 
    <add name="SecurityDisabledSiteMapProvider" type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="false" /> 
    </providers> 
</siteMap> 

और लॉग से मैंने आधार वर्ग में त्रुटि का कारण बन गया है जो हमारे सभी पी उम्र निकाले जाते हैं से:

private void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     SiteMapDataSource.StartingNodeUrl = "~/Default.aspx"; 
    } 
} 

साइटमैप के सभी में की पुष्टि की है url = "~/Default.aspx" भूमिकाओं के साथ साथ एक नोड है कि वहाँ = "*" (जो सार्वजनिक/गुमनाम उपयोग भी शामिल है), इसलिए मैं बहुत उलझन में हूं कि यह समस्या क्यों होती है।

समस्याओं पर विचार किया है मैं:

  1. साइट मैप Default.aspx के लिए एक नोड नहीं है। उनमें से सभी करते हैं।
  2. साइटमैप का Default.aspx नोड वर्तमान उपयोगकर्ता/भूमिका के सुरक्षा कारणों से सुलभ नहीं है। वे सभी अज्ञात उपयोगकर्ताओं के लिए सुलभ हैं और यह समस्या सुपर व्यवस्थापक उपयोगकर्ताओं के लिए भी मौजूद है।
  3. उत्तीर्ण यूआरएल में क्वेरीस्ट्रिंग्स (Default.aspx? Abcd) शामिल हैं। मुझे नहीं पता कि यह एक समस्या है (मुझे यकीन है कि यह उम्मीद नहीं करेगा) लेकिन एक बार जब समस्या स्वयं प्रकट होती है, तो मैं बिना क्वेरीस्ट्रिंग वाले यूआरएल को हस्तलेखित कर सकता हूं और समस्या अभी भी मौजूद है।
  4. साइटमैप परिवर्तन। यह
  5. साइटमैप फ़ाइल में सेवा की अनुमतियां नहीं है। साइटमैप तैनाती के बाद पूरी तरह से ठीक काम करता है, इसलिए जब तक IISRESET ठीक नहीं करता है, तो यह अनुमति नहीं है, तो यह कोई समस्या नहीं है।
  6. कार्यकर्ता प्रक्रिया विश्व स्तर पर भ्रष्ट हो जाती है। मुझे ऐसा नहीं लगता है। हमारे पास एक ही ऐप पूल में ~ 12 वेब साइटें हैं और समस्या हमेशा एक ही वेबसाइट के भीतर ही सीमित रहती है। साथ ही, हमने अभी तक एक ही वेबसाइट पर एक से अधिक वेबसाइटों के साथ ऐसा नहीं किया है, हालांकि यह अब तक 4 अलग-अलग लोगों में प्रकट हुआ है।

क्या कोई इस पर कुछ प्रकाश डाल सकता है? ऐसा लगता है कि गतिशील रूप से संकलित साइटमैप दूषित हो गया है या कुछ। मुझे मिला एकमात्र संकल्प IISRESET या समतुल्य है। और फिर भी, इस बारे में कोई जानकारी नहीं है कि समस्या का समाधान कब तक किया जाएगा। यह बहुत निराशाजनक है!

+0

यह किस सर्वर पर होस्ट किया गया है? –

+0

विन 2003 आर 2 मानक – Jaxidian

+0

हमें अभी भी इस समस्या का सामना करना पड़ रहा है और अभी भी इसके लिए उत्तर देना पसंद है ... – Jaxidian

उत्तर

0

हम्म। इसके गया कुछ साल के बाद से मैं ASP.net के साथ काम किया है, लेकिन अगर मुझे याद है, मैं एक ऐसी ही समस्या है जिसे मैं

Page.ResolveURL("~SomePage.aspx"); 

रनटाइम पर साइटमैप यूआरएल वास्तविक यूआरएल के लिए हल कर रहे हैं के साथ हल किया है, तो टिल्ड था हटा दिया गया है और वास्तविक यूआरएल के साथ प्रतिस्थापित किया गया है (मुझे लगता है :))।

+0

मुझे इसे एक शॉट देना होगा - धन्यवाद ! – Jaxidian

+0

बीटीडब्ल्यू, यह मेरी मदद कभी नहीं किया। – Jaxidian

+0

तो क्या आपने इसे अभी तक हल किया है? ओआईएफ, तो अन्य लोगों को यह जानने में रुचि हो सकती है कि कैसे। जैसे मैंने कहा, यह थोड़ी देर हो गया है। – Kell

0

मेरे पास इस समस्या के लिए दो संभावित विचार हैं। न तो काम करने की गारंटी है। ;-)

  1. यह संभव है कि आप भी अपने वेब अनुप्रयोग भर में विभिन्न फ़ोल्डरों में स्थित अपने web.config फ़ाइलों में से कुछ में एक ही समय में यूआरएल प्राधिकरण का उपयोग कर रहे है?

    उदाहरण URL प्राधिकरण की स्थापना एक web.config फ़ाइल में पाया जा सकता है:

    <location path="bobsSecret.aspx"> 
        <system.webServer> 
         <security> 
          <authorization> 
           <remove users="" roles="BobAndFriends" verbs="" /> 
           <add accessType="Allow" users="Bob" />   
    
          </authorization> 
         </security> 
        </system.webServer> 
    </location> 
    

    कारण मैं उल्लेख इस मैं में भूमिकाओं संपत्ति प्राप्त करने की कोशिश अतीत में कुछ परेशानी थी मेरी साइटमैप एक्सएमएल फाइल सही ढंग से काम करने के लिए सेटिंग्स के साथ मैंने अपने यूआरएल प्रमाणीकरण में web.config में लागू किया था।

    केवल एक चीज मैं कल्पना कर सकता रेस स्थिति किसी प्रकार का हो सकता है, जहां प्रक्रिया इन नीतियों को लागू करने के लिए जिम्मेदार से पहले एक ही स्थान पर (web.config) में एक सुरक्षा सेटिंग पढ़ रही है एक और जगह (वेब ​​में इसे पढ़ने जाएगा। साइटमैप)।

    कुछ पिछले मुद्दों के आधार पर अंधेरे में बस एक स्टैब, मैंने अनुभव किया था!

  2. एक दूसरा विकल्प के रूप में, आप के पीछे कोड पर अपने aspx पृष्ठ में बजाय Page_Load घटना में इस विन्यास डालने पर विचार कर सकते। आप इस कोशिश कर सकते:

    <asp:SiteMapDataSource 
        id="SiteMapDataSource1" 
        runat="server" 
        StartingNodeUrl="~/Default.aspx"> 
    </asp:SiteMapDataSource> 
    

    इस तरह अपने StartingNodeUrl ASPX पेज अपने आप में निर्दिष्ट किया जाता है, और अगर यह सही मायने में फ्रेमवर्क कोड में एक आंतरायिक बग है, शायद यह मामूली बदलाव समस्या को ठीक कर सकते हैं।

2

मैं इस सूत्र है कि मिल गया है नष्ट कर दिया :(किसी भी तरह मैं एक ही समस्या 'था' पर एक पिछले पोस्ट डाल दिया।

मैंने पाया कि कोई बात नहीं मैं क्या किया "के साथ साइटमैप नोड नहीं खोजा जा सका यूआरएल '~/रूटनोड "हुआ। मेरा ब्रेक आया जब मैंने फ़ाइल सिस्टम निर्भरता को हटाने का फैसला किया और दुष्ट कोड से SqlSiteMapProvider पर स्विच किया। मैंने पाया कि यह समस्या अधिक विश्वसनीय रूप से फिर से बनाई गई थी।

संक्षेप में आपको वह संदेश मिलता है क्योंकि कोई साइट मानचित्र नहीं है! मैंने पाया कि साइट मानचित्र डेटा स्रोत पर यदि आप StartingNodeUrl="~/root.htm" का उपयोग करते हैं तो कोई साइटमैप निर्मित होने पर त्रुटि संदेश दिखाई देगा। हालांकि यदि आप StartingNodeOffset="0" का उपयोग करते हैं तो त्रुटि संदेश प्रदर्शित नहीं होता है और साइटमैप नहीं बनने पर बस कोई मेनू प्रदान नहीं किया जाता है।

मुझे अजीब लगता है लेकिन मैंने इसे वापस XmlSiteMapProvider पर देखा। कभी-कभी इसे कभी-कभी बनाया जाता है। मेरा सिर पूरी तरह से बोनेट के नीचे नहीं मिल सका लेकिन ऐसा लगता है कि असीमित रूप से कुछ हो रहा है। किसी भी तरह से मैंने दुष्ट कोड से SqlSiteMapProvider पर स्विच किया है।

एक परिवर्तन मैं बनाया है, एक तरफ vb में कनवर्ट करने से अधिरोहित BuildSiteMap विधि की वापसी पर एक पुनरावर्ती कॉल डाल करने के लिए किया गया था:

' Return the root SiteMapNode 
If _Root Is Nothing Then 
    Return Me.BuildSiteMap 
Else 
    Return _Root 
End If 

यह सुनिश्चित करें कि साइटमैप बनाता है बनाता है। मैंने एक अनंत रिकर्सन गार्ड डालने के बारे में सोचा लेकिन यह आवश्यक नहीं लगता है।

मैं अभी भी सोच रहा हूं कि शायद एक नेटवर्क अंतराल या कुछ प्रमाणीकरण (जो हमारी जगह पर एक एडी नियंत्रक के माध्यम से है, और सुबह में पहली चीज लगी है !!) क्या XmlSiteMapProvider को यह Async बिल्ड विंडो याद आ रही है?

वास्तव में उम्मीद है कि इससे मदद मिलती है।