2009-02-17 13 views
17

पर एमवीसी अनुप्रयोग को तैनात करते समय मुझे एक खाली पृष्ठ मिल रहा है। मैं वर्तमान में उत्पादन सर्वर पर एमवीसी एएसपी.नेट के आरसी का उपयोग करके बनाया गया मेरा आवेदन तैनात कर रहा हूं जो अब कुछ भी नहीं दिखा रहा है। मेरी global.ascx में मार्गों ठेठ यानी हैंआईआईएस

routes.MapRoute(
      "Default",            // Route name 
      "{controller}.aspx/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 
     routes.MapRoute(
      "Root", 
      "", 
      new { controller = "Home", action = "Index", id = "" } 
     ); 

कर सकते हैं किसी भी एक आंकड़ा बाहर क्यों यह मुझे केवल रिक्त पृष्ठ

दिखा रहा है

क्षमा मैं भूल गया यह आईआईएस 6

है उल्लेख करने के लिए दिलचस्प बात यह है कि यह मेरे स्थानीय आईआईएस (यानी दोनों स्थानीय रूप से वीएस & एक्सपी के साथ मानक) में निर्मित है, साथ ही

उत्तर

1

मैं समस्या हल हो जाती, प्रमुख मुद्दा MVC ढांचे के विभिन्न संस्करणों था। उत्पादन सर्वर में एमवीसी बीटा था जबकि मैंने एमवीसी आरसी 1 स्थापित किया था।इसलिए जैसे ही मैंने सर्वर पर आरसी 1 स्थापित किया और साथ ही एमवीसी एक्सटेंशन पंजीकरण स्क्रिप्ट चलाया, सबकुछ काम करता है आपकी मदद लोगों के लिए धन्यवाद

+0

पंजीकरण स्क्रिप्ट द्वारा आपका क्या मतलब है। मेरे पास वर्तमान उत्पादन पर तैनाती पृष्ठ है और तैनाती के बाद सर्वर स्टेजिंग है। दोनों एमवीसी 3 स्थापित है। –

0

सर्वर वातावरण क्या है? यदि यह आईआईएस 7/सर्वर 2008 नहीं है तो रूटिंग को सही ढंग से काम करने के लिए आपको अन्य बदलाव करना पड़ता है, हालांकि यदि ऐसा है तो आपको शायद एक त्रुटि पृष्ठ मिलेगा, न कि एक खाली पृष्ठ।

0

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

आमतौर पर पहचान आईआईएस का उपयोग वेब साइट गुणों -> निर्देशिका सुरक्षा -> संपादित (प्रमाणीकरण और अभिगम नियंत्रण) में है। यदि आप अपने नेटवर्क पर किसी भी कंप्यूटर को वेबसाइट तक पहुंचने की अनुमति नहीं देना चाहते हैं तो आपको शायद "अनाम पहुंच सक्षम करें" बंद कर देना चाहिए। यदि आप इसे अनुमति देना चाहते हैं, तो यह वह पहचान होगी जिसे आपको अपने वेबपैड फ़ोल्डरों और फ़ाइलों में पहुंच प्रदान करने की आवश्यकता होगी। अन्यथा आपको उस भूमिका तक पहुंच प्रदान करने की आवश्यकता हो सकती है जिसमें उपयोगकर्ता पहचान शामिल हैं जिन्हें आप एक्सेस करना चाहते हैं।

+0

मैं आपके बिंदु को समझता हूं, लेकिन मैं किसी प्रमाणीकरण का उपयोग नहीं कर रहा हूं क्योंकि मैंने web.config के माध्यम से प्रमाणीकरण को भी अक्षम कर दिया है और केवल प्रमाणीकरण की आवश्यकता है जो मुझे डीबी इंस्टेंस चलाने के लिए आवश्यक है। मैं किसी भी लॉगिंग का उपयोग नहीं कर रहा हूं – Gripsoft

+0

मुझे लगता है कि शायद आईआईएस प्रमाणीकरण web.config में प्रमाणीकरण सेटिंग्स से अलग है, हालांकि मुझे यकीन नहीं है। मुझे लगता है कि आईआईएस में अज्ञात पहुंच को चालू करने की कोशिश कम से कम है और उस पहचान को वेबपैड फ़ोल्डरों और फ़ाइलों में जोड़ें। – Daniel

+0

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

0

इसकी प्रकृति से मैं उम्मीद करता हूं कि पहला मार्ग काम करेगा यदि आप/home.aspx जैसे यूआरएल पर जा रहे थे, लेकिन यदि आप बस/url पर जा रहे हैं तो एएसपीनेट को नहीं पता कि कैसे संभालें यूआरएल यह इंडेक्स.html, default.aspx, index.aspx, आदि जैसे आईआईएस डिफ़ॉल्ट पृष्ठों पर आज़माकर मैच करेगा। अगर कुछ भी नहीं मिलता है तो अनुरोध कहीं भी नहीं मिल रहा है। Default.aspx (या रूट में कोई अन्य अनुक्रमणिका फ़ाइल) बनाने का प्रयास कर रहे हैं, फिर पेज_लोड में response.redirect("~/Home.aspx") करें।

यदि यह काम नहीं करता है तो मैं यह source देखेंगे। आईआईएस 6 और एमवीसी के मुख्य कारणों में से एक अच्छा नहीं खेलता है कि आईआईएस 6 डिफ़ॉल्ट रूप से जंगली कार्ड * एएसपीनेट डीएल में मैप नहीं किया गया है।

मुझे यकीन है कि यह एक तरीका है कि उत्पाद सर्वर कॉन्फ़िगर किया गया है, क्या आप अपने XP इंस्टेंस और उत्पादन के बीच कोई तुलना कर सकते हैं?

0

क्या आपके पास उत्पादन सर्वर पर web.config में परिभाषित HTTP हैंडलर और मॉड्यूल हैं?

<httpHandlers> 
     <remove verb="*" path="*.asmx"/> 
     <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> 
     <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    </httpHandlers> 
    <httpModules> 
     <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    </httpModules> 

IIS6 पर, यूआरएल .mvc शामिल होना चाहिए (उदाहरण के लिए। /Products.mvc/ListAll)। उचित आईआईएस 6 विन्यास और .mvc विस्तार वैकल्पिक हल के लिए इन गाइड की जाँच करें:

Deploying ASP.NET MVC to IIS 6

Using ASP.NET MVC on IIS 6 without the .MVC Extension

19

जब आप अपने ग्लोबल में त्रुटि प्रबंधन सेट करते हैं तो आपको एक खाली पृष्ठ भी मिल जाएगा। और कुछ सामान्य गलत है (एक असेंबली की तरह जो पाया नहीं जा सका)।

जब आप इसे वैश्विक.एक्सएक्स में अक्षम करते हैं, तो आप सर्वर त्रुटि देख सकते हैं। उन शुरुआती बग को ठीक करने के बाद इसे फिर से सक्षम करना न भूलें।

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception exception = Server.GetLastError(); 
    RouteData routeData = new RouteData(); 
    routeData.Values.Add("controller", "ErrorController"); 
    routeData.Values.Add("action", "HandleTheError"); 
    routeData.Values.Add("error", exception); 

    Response.Clear(); 
    Server.ClearError(); 

    IController errorController = new ErrorController(); 
    errorController.Execute(new RequestContext(
     new HttpContextWrapper(Context), routeData)); 
} 
+1

त्रुटि नियंत्रक के लिए कोड क्या है? –

+0

http://stackoverflow.com/questions/1171035/asp-net-mvc-custom-error-handling-plication-error-global-asax –

+1

इससे काफी मदद मिली! –

3

रिक्त पृष्ठ दिखाया गया है जब त्रुटियों विशेष स्थानों में पाए जाते हैं - मेरे मामले में यह एक MethodNotFoundException था में ...

त्रुटि देखने के लिए, सुनिश्चित करें कि आप "HTTP त्रुटियाँ" और सक्षम "HTTP पुनर्निर्देशन बनाने "वेब सर्वर (आईआईएस) भूमिका में सेवाएं।

2

आम तौर पर जब मुझे यह मिलता है, तो ऐसा इसलिए होता है क्योंकि मैं आईआईएस 7 (या आईआईएस एक्सप्रेस) के विकास के बाद आईआईएस 6 पर तैनाती करते समय वेब.कॉन्फिग में निम्नलिखित जोड़ना भूल गया हूं। 7 जो विजुअल स्टूडियो के साथ आता है):

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
0

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

एक चीज जो आपको अपवादों को देखने से रोक सकती है वह ग्लोबलफिल्टर कोलेक्शन ग्लोबल.एक्सएक्स में एक एमवीसी फ़िल्टर के माध्यम से बुलाया जाता है जब वेबसाइट पहली बार लोड होती है। आप आमतौर पर Global.asax फ़ाइल में इन कॉल को पा सकते हैं। जब फ़ाइल पहली बार लोड होती है और इसकी घटनाएं होती हैं तो वह फ़ाइल आमतौर पर HttpAplication ऑब्जेक्ट को कॉल करती है। इसकी घटनाओं में यह डिफ़ॉल्ट एमवीसी मार्ग डेवलपर्स में लोड होता है, लेकिन साइट-व्यापी अपवाद हैंडलिंग को संसाधित करने वाले फ़िल्टर भी लोड कर सकता है। डेवलपर्स अक्सर ग्लोबल में फ़िल्टर के माध्यम से अपवाद हैंडलिंग करते हैं। सोचते हैं कि वे समझदारी से उपयोगकर्ता से अपवाद और मुद्दों को संभालने में कामयाब रहे हैं, लेकिन यह एक गलती है। अगर आपको वहां एक फ़िल्टर मिलता है तो बस उन्हें बाहर टिप्पणी करें। एक बार ऐसा करने के बाद अचानक आपकी सभी त्रुटियां आपके HTML पृष्ठ में दिखाई देंगी।

आप समस्या का निवारण कर सकते हैं! सौभाग्य!

0

यह भी मेरे लिए हो रहा था जब:

1) मैं जब ब्राउज़र यह स्वीकार करता है Gzip जोड़ने के लिए एक CompressAttribute गयी।

response.AppendHeader("Content-Encoding", "gzip"); 
        response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); 

2) मैं आउटपुट HTML को संशोधित किया गया था दिखाया गया फ़ोन नंबर बदलना:

response.Filter = new OutputHtmlReplacer(response.Filter, phoneNumber); 

जहां OutputHtmlReplacer एक वर्ग है कि MemoryStream से विरासत

तो है, समाधान था:

1) हेडर सत्यापित करें और जांचें कि क्या हम संपीड़न लागू कर रहे हैं।

2) यदि ऐसा है, तो नया आउटपुट एचटीएमएल रेप्लसर प्रतिक्रिया फ़िल्टर GzipStream द्वारा लपेटा जाना है।