2011-04-15 20 views
8

ASP.NET uygulamasında ve Dev makinemde IIS7'de yönlendirme kuralları oluşturdum, her şey iyi çalışıyor. IIS7'ye sahip olan prod sunucusuna çözüm dağıttığımda, URL'ye erişirken 404 hatası (sayfa bulunamadı) alıyorum. Belki birisi sorunun nerede olduğunu işaret edebilir mi?HTTP Hatası Yönlendirme 404.0 0x80070002

Fiili hata

HTTP Hatası 404.0 - Aradığınız kaynak Adından değişmişti, kaldırıldı olmuştur veya geçici olarak kullanılamıyor olduğunu etmiştir Bulunamadı. Detaylı Hata InformationModule IIS Web Çekirdek Bildirim MapRequestHandler Handler StaticFile Hata Kodu 0x80070002 İstenen URL http://xxx.xxx.xxx.xxx:80/pdf-button Fiziksel Yol C: \ www \ pathtoproject pdf düğmeli Oturum Açma Yöntem anonim oturum açma Kullanıcı Anonim \

Benim Güncel Kod

 <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

Ne tür bir yönlendirme kullandınız? MVC? –

+0

System.Web.Routing.RouteCollection sınıfını (.NET 4.0) kullanıyorum. – Tomas

+0

Ne için yönlendirileceğini bekliyorsunuz - pdf-button.aspx? Eminim, 0x80070002 = ERROR_FILE_NOT_FOUND – Rup

cevap

23

Sadece aşağıdaki satırların web.config dosyasına eklenmesi gerektiğini şimdi bulduk, şimdi her şey iyi çalışıyor Prod sunucusunda da.

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

runAllManagedModulesForAllRequests = "true" öğesinin tek başına işi gerçekleştirdiğine eminim ama Robert Bethge tarafından verilen çözüm de daha iyi. –

2

Benim çözümüm, HER ŞEY denedikten sonra: her şeyi

Kötü dağıtım, eski PrecompiledApp.config benim dağıtma konumu etrafında asılı idi ve yapım çalışmaz. çalıştı

Benim son ayarları:

  • Entegre modu uygulama havuzu
  • Hiçbir şey web.config'de değişiklikler

    • 7,5, Win2k8r2 x64 IIS, - bu yönlendirme için hiçbir özel işleyicileri demektir . İşte diğer yayınların birçoğunu referans gösteren bölümlerin anlık görüntüsü. Ben FluorineFX kullanıyorum, bu yüzden bu işleyici ekledi var, ama herhangi diğerlerini gerek yoktu:

      <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: (herhangi bir notun tek yöntem)

      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 bu daha sonra default.aspx tarafından idare edilecektir http://andrew.arace.info/#stackoverflow için http://andrew.arace.info/stackoverflow otomatik bir dönüşüm elde
  • +0

    Günümü PrecompiledApp.config bilgisi ile kaydettiniz. :-) Çok teşekkürler. – ekimpl

    0

    Bunu Windows Gezgini'nde işaretleyin.

    "bilinen türleri için gizle dosya türü uzantıları"

    8

    çözümü,

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

    eser önermiş, ancak performansı düşürebilir ve şimdi tüm kayıtlı HTTP modülleri her istekte çalıştığından bile, hatalara neden olabilir sadece yönetilen istekleri değil (örneğin .aspx). Bu modüller üzerinde çalışan anlamına gelir her .jpg .gif .css .Html .pdf vb

    bir daha mantıklı bir çözüm web.config bu eklemektir

    : onun için

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

    Kredi Colin gider Farr. Bu konuyla ilgili gönderisini http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html numaralı telefondan kontrol edin.

    1

    Benim için sorun, System.Web.Routing sürüm 3.5, web.config 4.0.0.0 sürümünün talep ettiği yeni bir sunucuydu. çözünürlük

    % WINDIR% \ Framework oldu \ v4.0.30319 \ aspnet_regiis -i

    % WINDIR% \ Framework64 \ v4.0.30319 \ aspnet_regiis -i

    0

    Global.asax.cs bu Having benim için çözdü.

    protected void Application_Start() 
         { 
          AreaRegistration.RegisterAllAreas(); 
          RouteConfig.RegisterRoutes(RouteTable.Routes); 
         } 
    
    İlgili konular