Rincian 500 pesan kesalahan, ASP + IIS 7.5

192

IIS 7.5, 2008rc2, asp klasik, pesan kesalahan 500:

Halaman tidak dapat ditampilkan karena kesalahan server internal telah terjadi.

Saya perlu tahu cara mengkonfigurasi IIS untuk mendapatkan kesalahan yang lebih rinci.
Saya sudah mencoba menyetel ke true semua opsi debugging di konfigurasi ASP.
Tapi itu tidak berhasil. Ada yang bisa bantu saya?

egidioc
sumber
Saya menggunakan cara berbeda untuk mencatat kesalahan dalam file teks: stackoverflow.com/questions/20475502/... Perbedaan utama - kesalahan informatin akan disimpan dalam file teks
Zam

Jawaban:

231

Aku datang untuk masalah yang sama dan tetap cara yang sama seperti Alex K .

Jadi jika "Kirim Kesalahan Ke Browser" tidak berfungsi, atur juga ini:

Halaman Kesalahan -> 500 -> Edit Pengaturan Fitur -> "Kesalahan Detail"

masukkan deskripsi gambar di sini

Perhatikan juga bahwa jika konten halaman kesalahan yang dikirim kembali cukup pendek dan Anda menggunakan IE, IE dengan senang hati akan mengabaikan konten berguna yang dikirim kembali oleh server dan sebagai gantinya menunjukkan halaman kesalahan generiknya sendiri. Anda dapat mematikannya di opsi IE, atau menggunakan browser lain.

Vaclav Elias
sumber
9
Jika masih tidak berfungsi, nonaktifkan pesan kesalahan http ramah
Tim Partridge
3
Jika "Halaman Kesalahan" tidak ada di panel Anda, pastikan fitur ini diaktifkan: Aktifkan atau nonaktifkan fitur Windows => Layanan WWW, Fitur HTTP Umum, [x] Kesalahan HTTP
fiat
1
@fiat Untuk mengaktifkan "Error Pages", aku harus pergi: Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford
Catatan: "Halaman Kesalahan" dan ". Halaman Kesalahan NET" berbeda. Anda secara spesifik menginginkan "Halaman Kesalahan" .
Jess Telford
@JessTelford HOW-TOuntuk Halaman Kesalahan NET ?
Kiquenet
94

Jika Anda menggunakan server jarak jauh, Anda dapat mengonfigurasi file web.config seperti:

<configuration>
<system.webServer>
    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>
</system.webServer>
<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
</system.web>

safhac
sumber
1
Sebenarnya, <system.webserver>pengaturan sudah cukup dalam kasus saya, terima kasih.
marapet
4
The system.webServerBagian dibaca oleh IIS 7 + bahkan ketika menjalankan ASP klasik
Tim Lewis
2
customErrors mode = "Off" melakukannya untuk saya
spankmaster79
tidak perlu lagi menggunakan customErrors(misalnya IIS 7+, ASP.NET, Classic AppPool ) tedgustaf.com/blog/2011/5/…
Kiquenet
49

Klik dua kali "ASP" di layar Beranda situs di admin IIS, luaskan "Properti Debugging", aktifkan "Kirim kesalahan ke browser", dan klik "Terapkan".

Di bawah "Halaman Kesalahan" pada layar beranda pilih "500", lalu "Edit pengaturan fitur" dan pilih "Kesalahan Detail".

Perhatikan bahwa langkah-langkah yang sama berlaku untuk IIS 8.0 (Windows Server 2012).

Alex K.
sumber
Mungkin berlaku untuk IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) dengan CLASSIC AppPool (TIDAK terintegrasi)
Kiquenet
43

Setelah mencoba jawaban Vaclav dan Alex , saya masih harus menonaktifkan "Tampilkan pesan kesalahan HTTP ramah" di IE

masukkan deskripsi gambar di sini

Tim Partridge
sumber
20

Di web.config di bawah

<system.webServer>

ganti (atau tambahkan) garis

<httpErrors errorMode="Detailed"></httpErrors>

dengan

<httpErrors existingResponse="PassThrough" errorMode="Detailed"></httpErrors>

Ini karena secara default IIS7 memotong kode status HTTP seperti 4xx dan 5xx yang dihasilkan oleh aplikasi lebih jauh dalam pipa.

Selanjutnya, aktifkan " Kirim Kesalahan ke Browser " di bawah bagian "ASP", dan di bawah " Halaman Kesalahan / Edit Pengaturan Fitur ", pilih "Kesalahan terperinci".

Juga, berikan izin menulis di folder situs web ke grup bawaan IIS_IUSRS .

Niente00
sumber
1
Untuk yang setara dengan pengguna shell daya, jalankan:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz
20

TLDR: Pertama tentukan dari mana dalam pipeline Anda mendapatkan kesalahan (gulir mencari screenshot dari sesuatu yang menyerupai kesalahan Anda), buat perubahan untuk mendapatkan sesuatu yang baru, ulangi.

Pertama-tama tentukan pesan kesalahan apa yang sebenarnya Anda lihat.

Jika Anda melihat file yang terletak di sini ...

% SystemDrive% \ inetpub \ custerr \\ 500.htm

... yang umumnya terlihat seperti ini:

IIS Default 500 error

... maka Anda tahu bahwa Anda melihat halaman kesalahan yang saat ini dikonfigurasi dalam ** IIS ** dan Anda TIDAK perlu mengubah pengaturan customErrors ASP.net, pengaturan detail kesalahan asp, atau pengaturan browser "tampilkan http ramah kesalahan".

Anda mungkin ingin melihat jalur yang dirujuk di atas alih-alih mempercayai tangkapan layar saya kalau-kalau ada yang mengubahnya.

"Ya, saya melihat kesalahan yang dijelaskan di atas ..."

Dalam hal ini, Anda melihat pengaturan < httpErrors > atau di IIS Manager, itu Halaman Kesalahan -> Edit Pengaturan Fitur. Default untuk ini adalah errorMode = DetailedLocalOnly pada tingkat node server (yang bertentangan dengan tingkat situs) yang berarti bahwa sementara Anda akan melihat halaman kesalahan yang dikonfigurasi ini saat jauh, Anda harus dapat logon secara lokal ke server dan melihat penuh kesalahan yang seharusnya terlihat seperti ini:

Detail HTTP Error

Anda harus memiliki semua yang Anda butuhkan pada saat itu untuk memperbaiki kesalahan saat ini.

"Tapi saya tidak melihat kesalahan detail bahkan browsing di server"

Itu menyisakan beberapa kemungkinan.

  1. Browser yang Anda gunakan di server dikonfigurasikan untuk menggunakan proxy dalam pengaturan koneksi sehingga tidak dilihat sebagai "lokal".
  2. Anda sebenarnya tidak sedang meramban ke situs yang menurut Anda Anda jelajahi - ini biasanya terjadi ketika ada penyeimbang beban yang terlibat. Lakukan pemeriksaan ping untuk melihat apakah dns memberi Anda IP di server atau di tempat lain.
  3. Pengaturan httpErrors situs Anda disetel untuk "Khusus". Ubah ke "DetailedLocalOnly". Namun, jika Anda memiliki kesalahan konfigurasi, ini mungkin tidak berfungsi karena httpErrors tingkat situs juga merupakan item konfigurasi. Dalam hal ini lanjutkan ke # 4
  4. Default untuk httpErrors untuk semua situs ditetapkan untuk "Custom". Dalam hal ini Anda perlu mengklik pada node server tingkat atas di IIS Manager (dan bukan situs tertentu) dan mengubah pengaturan httpErrors di sana ke DetailedLocalOnly. Jika ini adalah server internal dan Anda tidak khawatir membocorkan informasi sensitif, Anda juga dapat mengaturnya ke "Detail" yang memungkinkan Anda melihat kesalahan dari klien selain dari server.
  5. Anda melewatkan modul di server seperti UrlRewrite (modul ini banyak menggigit saya, dan sering memberikan pesan umum terlepas dari pengaturan httpErrors).

"Masuk ke server bukan pilihan bagi saya"

Ubah httpErrors situs Anda menjadi "Detail" sehingga Anda dapat melihatnya dari jarak jauh. Tetapi jika itu tidak berhasil, kesalahan Anda mungkin sudah merupakan kesalahan konfigurasi, lihat # 3 tepat di atas. Jadi Anda mungkin terjebak dengan # 4 atau # 5 dan Anda akan membutuhkan seseorang dari tim server Anda.

"Aku tidak melihat halaman kesalahan yang dijelaskan di atas. Aku melihat sesuatu yang berbeda"

Jika Anda melihat ini ...

masukkan deskripsi gambar di sini

... dan Anda berharap untuk melihat sesuatu seperti ini ...

masukkan deskripsi gambar di sini

... maka Anda perlu mengubah "Kirim kesalahan ke peramban" menjadi true di IIS Manager, di bawah Situs -> IIS -> ASP -> Properti Debugging

Jika Anda melihat ini ...

yaitu kesalahan ramah 1

atau ini...

yaitu kesalahan ramah 2

... Anda harus menonaktifkan kesalahan ramah di peramban atau menggunakan tampilan web fiddler untuk melihat respons aktual vs apa yang peramban pilih untuk ditampilkan kepada Anda.

Jika Anda melihat ini ...

Kesalahan khusus diaktifkan

... maka kesalahan khusus berfungsi tetapi Anda tidak memiliki halaman kesalahan khusus (tentu saja pada saat ini sedang berbicara tentang .net dan bukan asp klasik). Anda perlu mengubah tag customErrors Anda di web.config ke RemoteOnly untuk melihat di server, atau Tidak aktif untuk melihat dari jarak jauh.

Jika Anda melihat sesuatu yang ditata seperti situs Anda, maka kesalahan khusus kemungkinan On atau RemoteOnly dan itu menampilkan halaman kustom (Views-> Shared-> Error.cshtml di MVC misalnya). Yang mengatakan, itu tidak mungkin tetapi mungkin seseorang mengubah halaman di IIS untuk httpErrors jadi lihat bagian pertama tentang itu.

b_levitt
sumber
9

coba atur nilai atribut httpErrors "existingResponse" menjadi "PassThrough". Milik saya diatur pada "Ganti" yang menyebabkan YSOD tidak ditampilkan.

<httpErrors errorMode="Detailed" existingResponse="PassThrough">
Dana Benson
sumber
2
customErrors untuk asp.net. httpErrors untuk IIS7, dan karenanya menangani konten yang tidak melalui penangan .net (mis. png, .js dll.) Jika Anda menginginkan halaman kesalahan untuk tipe konten non -.net, gunakan halaman kesalahan IIS (httpErrors untuk IIS7 , UI untuk IIS6.) Atribut customErrors digunakan ketika kode .net melempar pengecualian (404, 403, 500 dll) dan atribut httpErrors digunakan ketika IIS sendiri melempar pengecualian. Ini karena secara default IIS7 memotong kode status HTTP seperti 4xx dan 5xx yang dihasilkan oleh aplikasi lebih jauh dalam pipa.
Kiquenet
6

Satu hal yang tidak ada yang disebutkan adalah sebagai perbaikan yang sangat cepat dan sementara, Anda dapat melihat kesalahan pada localhost server web itu.

RandomUs1r
sumber
1
Itu jika opsi ketiga yang terlihat dalam jawaban Vaclav dipilih.
ricksmt
3

Anda juga dapat memverifikasi bahwa jika Anda mengubah folder situs web utama Anda ( c:\inetpub\wwwroot) ke folder lain, Anda harus memberikan izin baca kepada grup IIS_IUSRS di folder baru.

Rogerio Barretto
sumber
3

Untuk orang-orang yang telah mencoba semuanya dan tidak bisa mendapatkan detail kesalahan untuk ditampilkan, seperti saya, adalah ide yang baik untuk memeriksa berbagai tingkat konfigurasi. Saya memiliki file konfigurasi di tingkat Situs Web dan pada tingkat Aplikasi (di dalam situs web) periksa keduanya. Juga, ternyata, saya memiliki Kesalahan Detail yang dinonaktifkan pada simpul tertinggi di IIS (tepat di bawah Halaman Awal, ia memiliki nama yang sama dengan nama pengguna webservers). Periksa Halaman Kesalahan di sana.

Jon Koeter
sumber
1

Jika Anda menjalankan browser di server dan menguji url proyek Anda dengan ip lokal Anda telah menerima semua kesalahan proyek itu tanpa halaman kesalahan umum (misalnya 500 halaman kesalahan).

Ali Rasouli
sumber