IIS 7.0/Windows Server 2008 पर ASP.NET MVC 3 ऐप के लिए 404.0 त्रुटि प्राप्त करना




iis-7 .net-4.0 (4)

आपने वास्तव में मुझे याद दिलाया कि मुझे इस मुद्दे को यहां एक वातावरण में ठीक करने की आवश्यकता है। यदि आपकी स्थिति मेरे जैसा ही है तो यह एक साधारण फिक्स है।

बस अपनी वेब कॉन्फ़िगरेशन में निम्न जोड़ें:

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

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

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

मैं एक विंडोज 2008 x64 सर्वर (आईआईएस 7.0 को स्पष्ट रूप से चल रहा है) में एएसपी.नेट एमवीसी 3 एप्लिकेशन को तैनात करने का प्रयास कर रहा हूं, और आईआईएस सामग्री को सही तरीके से प्रस्तुत नहीं करना चाहता। सभी अनुरोधों के परिणामस्वरूप 404.0 त्रुटि होती है, क्योंकि अनुरोध किसी भी हैंडलर से मेल नहीं खाते हैं और आईआईएस अनुरोधों को पूरा करने के लिए स्टेटिकफाइल हैंडलर का उपयोग करने का प्रयास कर रहा है। यह मुद्दा .NET 4.0 से संबंधित प्रतीत होता है, क्योंकि मेरे पास एक एमवीसी 2 एप्लिकेशन है जो एक एप पूल में ठीक है जो .NET 2.0 रनटाइम के लिए कॉन्फ़िगर किया गया है।

मुझे विंडोज 7 और विंडोज सर्वर 2008 आर 2 दोनों पर आईआईएस 7.5 सर्वर पर इस एप्लिकेशन को तैनात करने में कोई समस्या नहीं है।

तैनाती से पहले, 2008 सर्वर में .NET 4.0 या ASP.NET MVC 3 स्थापित नहीं था, इसलिए यहां दिए गए चरणों को मैंने एप्लिकेशन को तैनात करने से पहले किया था:

  1. स्थापित .NET 4.0
  2. Ran aspnet_regiis.exe (फ्रेमवर्क 64 / v4.0.30319 फ़ोल्डर से)
  3. वेब प्लेटफार्म इंस्टॉलर का उपयोग कर एएसपी.नेट एमवीसी 3 स्थापित किया गया
  4. कुछ आईआईएस 7.0 या आईआईएस 7.5 हैंडलर को उन अनुरोधों को संभालने के लिए एप्लाइड एमएस अपडेट KB980368 जिनके यूआरएल एक अवधि के साथ समाप्त नहीं होते हैं

एप्लिकेशन में स्थिर संसाधनों के लिए अनुरोध (जावास्क्रिप्ट फाइलें, छवियां इत्यादि) बिना छेड़छाड़ के गुजरते हैं, लेकिन एमवीसी एक्शन के लिए कोई अनुरोध 404.0 त्रुटि के साथ विफल रहता है। मैंने देखा है कि आईआईएस इन अनुरोधों को संभालने के लिए स्टेटिकफाइल हैंडलर का उपयोग कर रहा है, जो स्पष्ट रूप से गलत है। एएसपी.नेट 4.0 हैंडलर (यानी एक्सटेंशन रहित यूआरएल-आईएसएपीआई-4.0 * हैंडलर) जहां तक ​​मैं कह सकता हूं, ठीक से परिभाषित किया गया है, इसलिए मुझे नहीं पता कि इन हैंडलरों में से एक द्वारा अनुरोध क्यों नहीं किया जाएगा और सभी को गिर जाएगा StaticFile हैंडलर के लिए रास्ता नीचे।

मैं निम्नलिखित एमएस ज्ञान बेस आलेख में भी आया जो उल्लेख करता है कि आपको यह सुनिश्चित करना चाहिए कि HTTP पुनर्निर्देशन और स्टेटिक सामग्री संपीड़न सर्वर पर सक्षम / स्थापित है जहां आप 404 त्रुटियों का सामना कर रहे हैं। मैंने जांच की, और दोनों सर्वर पहले से ही मेरे सर्वर के लिए सक्षम थे। मैंने सुविधाओं का उपयोग करने और पुनर्स्थापित करने का भी प्रयास नहीं किया।

इस बिंदु पर मैं विचारों से पूरी तरह से बाहर हूं कि यह ठीक से काम क्यों नहीं कर रहा है। मैं इस मुद्दे को दो अलग-अलग आईआईएस 7.0 सर्वरों पर दोहराने में सक्षम हूं। मैं क्या खो रहा हूँ?


कृपया सुनिश्चित करें कि आप आईआईएस 7.0 एकीकृत मोड के तहत चल रहे हैं। यदि आपको आईआईएस 7.0 क्लासिक मोड के तहत इसे चलाने की ज़रूरत है, तो आपको मार्गों को काम करने के लिए कई क्रियाएं करने की आवश्यकता है। कृपया निम्नलिखित ब्लॉग पोस्ट देखें;

http://www.tugberkugurlu.com/archive/running-asp-net-mvc-under-iis-6-0-and-iis-7-0-classic-mode---solution-to-routing-problem

http://www.tugberkugurlu.com/archive/deployment-of-asp-net-mvc-3-rc-2-application-on-a-shared-hosting-environment-without-begging-the-hosting-company


मुद्दा यह हुआ कि मेरा कोड पूरी तरह से ऑटो-स्टार्ट कार्यक्षमता पर निर्भर था जो केवल आईआईएस 7.5 में उपलब्ध है। मैं आईआईएस में असफल अनुरोध ट्रेसिंग सुविधा की मदद से इस मुद्दे को खोजने में सक्षम था, और अब मैंने अपनी global.asax.cs फ़ाइल को संशोधित कर दिया है ताकि आवेदन को ठीक से प्रारंभ किया जा सके, भले ही इसे लोड / कैसे लोड किया जाए।


मेरा समाधान, सब कुछ करने के बाद:

खराब तैनाती, एक पुराना PrecompiledApp.config मेरे तैनाती स्थान के आसपास लटक रहा था, और सब कुछ काम नहीं कर रहा था।

मेरी अंतिम सेटिंग्स जो काम करती है:

  • आईआईएस 7.5, विन 2k8r2 x64,
  • एकीकृत मोड अनुप्रयोग पूल
  • Web.config में कुछ भी नहीं बदलता - इसका मतलब रूटिंग के लिए कोई विशेष हैंडलर नहीं है। अनुभागों का मेरा स्नैपशॉट यहां कई अन्य पोस्ट संदर्भ है। मैं फ्लूराइनएफएक्स का उपयोग कर रहा हूं, इसलिए मेरे पास हैडलर जोड़ा गया है, लेकिन मुझे किसी अन्य की आवश्यकता नहीं थी:

    <system.web>
      <compilation debug="true" targetFramework="4.0" />
      <authentication mode="None"/>
    
      <pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
      <httpRuntime requestPathInvalidCharacters=""/>
    
      <httpModules>
        <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/>
      </httpModules>
    </system.web>
      <system.webServer>
        <!-- Modules for IIS 7.0 Integrated mode -->
        <modules>
          <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx" />
        </modules>
    
        <!-- Disable detection of IIS 6.0 / Classic mode ASP.NET configuration -->
        <validation validateIntegratedModeConfiguration="false" />
      </system.webServer>
    
  • Global.ashx: (किसी भी नोट का केवल तरीका)

    void Application_Start(object sender, EventArgs e) {
        // Register routes...
        System.Web.Routing.Route echoRoute = new System.Web.Routing.Route(
              "{*message}",
            //the default value for the message
              new System.Web.Routing.RouteValueDictionary() { { "message", "" } },
            //any regular expression restrictions (i.e. @"[^\d].{4,}" means "does not start with number, at least 4 chars
              new System.Web.Routing.RouteValueDictionary() { { "message", @"[^\d].{4,}" } },
              new TestRoute.Handlers.PassthroughRouteHandler()
           );
    
        System.Web.Routing.RouteTable.Routes.Add(echoRoute);
    }
    
  • PassthroughRouteHandler.cs - इसने http://andrew.arace.info/ से http://andrew.arace.info/ पर एक स्वचालित रूपांतरण प्राप्त किया जिसे डिफ़ॉल्ट रूप से संभाला जाएगा .aspx:

    public class PassthroughRouteHandler : IRouteHandler {
    
        public IHttpHandler GetHttpHandler(RequestContext requestContext) {
            HttpContext.Current.Items["IncomingMessage"] = requestContext.RouteData.Values["message"];
            requestContext.HttpContext.Response.Redirect("#" + HttpContext.Current.Items["IncomingMessage"], true);
            return null;
        }
    }
    




asp.net-4.0