2011-04-15 14 views
8

मैंने अपने एएसपी.NET एप्लिकेशन में रूटिंग नियम बनाए हैं और आईआईएस 7 में मेरी देव मशीन पर सब कुछ ठीक काम करता है। जब मैं प्रोड सर्वर के समाधान को तैनात करता हूं जिसमें आईआईएस 7 भी होता है तो मुझे यूआरएल एक्सेस करते समय त्रुटि 404 (पृष्ठ नहीं मिला) मिलता है। शायद कोई यह कह सकता है कि समस्या कहां है?रूटिंग HTTP त्रुटि 404.0 0x80070002

वास्तविक त्रुटि

HTTP त्रुटि 404.0 - नहीं मिला इसका नाम बदल दिया था संसाधन आप के लिए देख रहे हैं, हटा दिया गया है, या अस्थायी रूप से अनुपलब्ध है। विस्तृत त्रुटि InformationModule आईआईएस वेब कोर अधिसूचना MapRequestHandler हैंडलर StaticFile त्रुटि कोड 0x80070002 अनुरोधित URL http://xxx.xxx.xxx.xxx:80/pdf-button शारीरिक पथ C: \ www \ pathtoproject \ पीडीएफ बटन लॉग ऑन विधि बेनामी लॉग ऑन उपयोगकर्ता बेनामी

मेरे वास्तविक कोड

 <add key="RoutePages" value="all,-forum/"/> 

      UrlRewrite.Init(ConfigurationManager.AppSettings["RoutePages"]); 


    public static class UrlRewrite 
    { 
      public static void Init(string routePages) 
      { 

       _routePages = routePages.ToLower().Split(new[] { ',' }); 
       RegisterRoute(RouteTable.Routes); 




      } 

      static void RegisterRoute(RouteCollection routes) 
      { 

       routes.Ignore("{resource}.axd/{*pathInfo}"); 
       routes.Ignore("favicon.ico"); 
       foreach (string routePages in _routePages) 
       { 
        if (routePages == "all") 
         routes.MapPageRoute(routePages, "{filename}", "~/{filename}.aspx"); 
        else 
         if (routePages.StartsWith("-")) 
          routes.Ignore(routePages.Replace("-", "")); 
         else 
         { 
          var routePagesNoExt = routePages.Replace(".aspx", ""); 
          routes.MapPageRoute(routePagesNoExt, routePagesNoExt, string.Format("~/{0}.aspx", routePagesNoExt)); 
         } 
       } 

      } 
} 
+0

किस प्रकार का रूटिंग आपने उपयोग किया? एमवीसी? –

+0

मैं System.Web.Routing.RouteCollection क्लास (.NET 4.0) – Tomas

+0

का उपयोग करता हूं आप इसे पीडीएफ-बटन.aspx पर रूट करने की क्या उम्मीद कर रहे हैं? जैसा कि मुझे यकीन है कि आपने 0x80070002 = ERROR_FILE_NOT_FOUND – Rup

उत्तर

23

बस पाया गया कि नीचे दी गई रेखाएं web.config फ़ाइल में जोड़ दी जानी चाहिए, अब सब कुछ ठीक काम करता है प्रोड सर्वर पर भी।

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" > 
     <remove name="UrlRoutingModule"/>  
    </modules> 
    </system.webServer> 
+0

रन एल्ममेनेड मॉड्यूलफोरअलरक्वेट्स = "सच" अकेले ही काम किया है लेकिन रॉबर्ट बेथगे द्वारा दिए गए समाधान भी बेहतर हैं। –

2

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

बुरा तैनाती, एक पुराने PrecompiledApp.config मेरी तैनाती स्थल के चारों ओर लटक रहा था, और बनाने के लिए सब कुछ काम नहीं। जो काम

मेरे अंतिम सेटिंग्स:

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

    <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

    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; 
        } 
    } 
    
: - .cs इस http://andrew.arace.info/#stackoverflow करने के लिए http://andrew.arace.info/stackoverflow से एक स्वचालित बातचीत जो तब default.aspx द्वारा नियंत्रित किया जाएगा हासिल की
+0

आपने अपना दिन PrecompiledApp.config जानकारी से बचाया है। :-) बहुत बहुत धन्यवाद। – ekimpl

0

विंडोज एक्सप्लोरर में इसे अनचेक करें।

"ज्ञात प्रकार के लिए छिपाएं फ़ाइल प्रकार एक्सटेंशन"

8

समाधान का सुझाव दिया

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" > 
    <remove name="UrlRoutingModule"/>  
    </modules> 
</system.webServer> 

काम करता है, लेकिन प्रदर्शन में कमी कर सकते हैं और क्योंकि अब सभी पंजीकृत HTTP मॉड्यूल प्रत्येक अनुरोध पर चलने भी, त्रुटियों का कारण बन सकती, न केवल प्रबंधित अनुरोध (जैसे .aspx)। इसका मतलब यह है मॉड्यूल पर चलेगा हर .jpg .gif .css .html .pdf आदि

एक और अधिक समझदार समाधान अपने web.config में यह शामिल करने के लिए है: उसके लिए

<system.webServer> 
    <modules> 
    <remove name="UrlRoutingModule-4.0" /> 
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 

क्रेडिट कॉलिन को जाता है फार। इस विषय के बारे में http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html पर अपनी पोस्ट देखें।

1

मेरे लिए समस्या एक नया सर्वर था जो System.Web.Routing संस्करण 3.5 का था जबकि web.config ने संस्करण 4.0.0.0 का अनुरोध किया था। संकल्प

% WINDIR% \ फ्रेमवर्क था \ v4.0.30319 \ aspnet_regiis मैं

% WINDIR% \ Framework64 \ v4.0.30319 \ aspnet_regiis मैं

0

Global.asax.cs में इस के बाद इसे मेरे लिए हल किया।

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
     } 
संबंधित मुद्दे