Pertanyaan Mendapatkan error 404.0 untuk aplikasi ASP.NET MVC 3 di IIS 7.0 / Windows Server 2008


Saya mencoba untuk menyebarkan aplikasi ASP.NET MVC 3 ke server Windows 2008 x64 (menjalankan IIS 7.0 jelas), dan IIS tampaknya tidak ingin menyajikan konten dengan benar. Semua permintaan menghasilkan kesalahan 404.0, karena permintaan tidak cocok dengan handler mana pun dan IIS berusaha menggunakan penangan StaticFile untuk melayani permintaan. Masalah ini tampaknya terkait dengan .NET 4.0, karena saya memiliki aplikasi MVC 2 berjalan baik-baik saja di kolam aplikasi yang dikonfigurasi untuk .NET 2.0 runtime.

Saya tidak memiliki masalah dalam menyebarkan aplikasi yang sama ini ke server IIS 7.5 baik pada Windows 7 dan Windows Server 2008 R2.

Sebelum penyebaran, server 2008 tidak memiliki .NET 4.0 atau ASP.NET MVC 3 terinstal, jadi berikut adalah langkah-langkah yang saya lakukan sebelum menerapkan aplikasi:

  1. Terpasang .NET 4.0
  2. Ran aspnet_regiis.exe (dari folder Framework64 / v4.0.30319)
  3. Memasang ASP.NET MVC 3 menggunakan pemasang platform web
  4. Pembaruan MS yang diterapkan KB980368 untuk mengaktifkan IIS 7.0 atau IIS 7.5 handler tertentu untuk menangani permintaan yang URL-nya tidak berakhir dengan satu periode

Permintaan untuk sumber daya statis dalam aplikasi (file JavaScript, gambar, dll) melalui tanpa hambatan, tetapi permintaan apa pun ke tindakan MVC gagal dengan kesalahan 404.0. Saya perhatikan bahwa IIS menggunakan handler StaticFile untuk menangani permintaan ini, yang jelas salah. The ASP.NET 4.0 handlers (yaitu ExtensionlessUrl-ISAPI-4.0 * handler) didefinisikan dengan benar sejauh yang saya tahu, jadi saya tidak tahu mengapa / bagaimana permintaan tidak akan ditangani oleh salah satu penangan ini dan akan jatuh semua jalan ke penangan StaticFile.

Saya juga menemukan yang berikut ini Artikel basis pengetahuan MS yang menyebutkan bahwa Anda harus memastikan HTTP Redirection dan Static Content Compression diaktifkan / dipasang di server tempat Anda mengalami kesalahan 404. Saya sudah memeriksa, dan kedua fitur sudah diaktifkan untuk server saya. Saya bahkan mencoba menghapus dan menginstal ulang fitur-fitur tidak berhasil.

Pada titik ini saya benar-benar kehabisan ide mengapa ini tidak berfungsi sebagaimana mestinya. Saya telah mampu mereplikasi masalah ini pada 2 server IIS 7.0 yang berbeda. Apa yang saya rindukan?


32
2018-02-24 22:05


asal


Jawaban:


Anda sebenarnya hanya mengingatkan saya bahwa saya perlu memperbaiki masalah ini di lingkungan sini. Jika situasi Anda sama dengan saya maka itu adalah perbaikan yang sederhana.

Cukup tambahkan yang berikut ke konfigurasi web Anda:

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

Edit: Untuk memberikan penjelasan lebih lanjut tentang masalah yang dihadapi. Dalam kasus saya apa yang terjadi adalah ketika saya menambahkan pemetaan rute kustom IIS melihat permintaan sebagai permintaan Folder / File Statis dan dengan demikian melompati proses pekerja ASP.NET. Ini berperilaku berbeda dalam lingkungan pengembangan umumnya karena sedang berjalan di bawah pengembangan web server yang juga akan melewati semua permintaan melalui proses bersih.

Entri Config Web ini memberitahu IIS bahwa Anda memiliki modul yang harus dijalankan pada setiap permintaan web bahkan jika IIS menentukannya menjadi file statis atau folder.


35
2018-02-25 19:02



Harap pastikan bahwa Anda menjalankan di bawah mode IIS 7.0 Terpadu. Jika Anda perlu menjalankannya di bawah mode IIS 7.0 Classic, Anda perlu melakukan beberapa tindakan untuk membuat rute bekerja. Silakan lihat posting blog berikut ini;

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


3
2018-03-05 10:16



Masalahnya adalah bahwa kode saya benar-benar mengandalkan fungsi mulai otomatis yang hanya tersedia di IIS 7.5. Saya dapat menemukan masalah ini dengan bantuan fitur Tracing Permintaan Gagal di IIS, dan saya sekarang telah memodifikasi file global.asax.cs saya sehingga aplikasi akan diinisialisasi dengan benar, terlepas dari bagaimana / ketika dimuat.


2
2018-02-28 16:08



Solusi saya, setelah mencoba SEMUANYA:

Penyebaran buruk, lama PrecompiledApp.config berada di sekitar lokasi penerapan saya, dan membuat semuanya tidak berfungsi.

Pengaturan terakhir saya yang berhasil:

  • IIS 7.5, Win2k8r2 x64,
  • Kolam aplikasi mode terintegrasi
  • Tidak ada perubahan di web.config - ini berarti tidak ada penangan khusus untuk routing. Inilah snapshot saya dari bagian-bagian banyak referensi posting lainnya. Saya menggunakan FluorineFX, jadi saya memiliki handler yang ditambahkan, tetapi saya tidak membutuhkan yang lain:

    <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: (hanya metode catatan saja)

    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 - ini mencapai konversi otomatis dari http://andrew.arace.info/stackoverflow untuk http://andrew.arace.info/#stackoverflow yang kemudian akan ditangani oleh default.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;
        }
    }
    

2
2018-03-17 16:13



Jika Anda menjalankan aplikasi web Anda di IIS 7.5 atau lebih tinggi, harap pastikan bahwa layanan peran untuk IIS diaktifkan dengan benar. Layanan peran yang diminati adalah: ASP.NET, Dasar Otentikasi, HTTP Redirection, filter ISAPI, dll.

Anda dapat pergi ke layanan peran melalui program Tambah atau Hapus - Mengaktifkan atau menonaktifkan fitur Windows. Semoga ini membantu.

Salam, Kiran Banda


0
2018-03-13 08:52



Saya memiliki masalah yang sama. Punyaku berakhir dengan kegagalan perakitan saat aplikasi dimulai. Saya mengaktifkan Fusion Log Viewer untuk melihat majelis mana yang gagal dan menemukan jawabannya. Saya tidak akan pernah menemukan ini karena sepertinya masalah routing MVC, tapi saya pikir saya akan memposting ini memetikan orang lain menghabiskan berjam-jam pada masalah ini juga!


0
2018-03-22 22:36