Ayrıntılı 500 hata iletisi, ASP + IIS 7.5


192

IIS 7.5, 2008rc2, klasik asp, 500 hata iletisi:

Dahili sunucu hatası oluştuğundan sayfa görüntülenemiyor.

Daha ayrıntılı bir hata almak için IIS'yi nasıl yapılandıracağımı bilmem gerekiyor.
ASP yapılandırmasındaki tüm hata ayıklama seçeneklerini doğru ayarlamaya çalıştım.
Ama bu işe yaramadı. Biri bana yardım edebilir mi?


Metin dosyasındaki hatayı günlüğe kaydetmek için farklı bir yol kullanıyorum: stackoverflow.com/questions/20475502/… Ana fark - hata bilgileri metin dosyasında saklanacak
Zam

Yanıtlar:


231

Aynı sorunla karşılaştım ve Alex K ile aynı şekilde düzelttim .

Yani "Tarayıcıya Hata Gönder" çalışmıyorsa, bunu da ayarlayın:

Hata Sayfaları -> 500 -> Özellik Ayarlarını Düzenle -> "Ayrıntılı Hatalar"

resim açıklamasını buraya girin

Ayrıca, geri gönderilen hata sayfasının içeriği oldukça kısaysa ve IE kullanıyorsanız, IE'nin sunucu tarafından geri gönderilen faydalı içeriği görmezden geleceğini ve bunun yerine kendi genel hata sayfasını göstereceğini unutmayın. Bunu IE'nin seçeneklerinde kapatabilir veya farklı bir tarayıcı kullanabilirsiniz.



3
Panelinizde "Hata Sayfaları" eksikse, özelliğin etkinleştirildiğinden emin olun: Windows özelliklerini açma veya kapatma => WWW Hizmetleri, Ortak HTTP Özellikleri, [x] HTTP Hataları
fiat

1
"Hata Sayfaları" etkinleştirmek için @fiat, ben gitmek zorunda kaldı: Turn Windows features on or off > Internet Information Services > World Wide Web Services > Common HTTP Features > [✓] HTTP Errors.
Jess Telford

Not: "Hata Sayfaları" ve ".NET Hata Sayfaları" farklıdır. Özellikle "Hata Sayfaları" istiyorsunuz .
Jess Telford

NET Hata SayfalarıHOW-TO için @JessTelford ?
Kiquenet

94

Uzak bir sunucudaysanız, web.config dosyanızı şu şekilde yapılandırabilirsiniz:

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


1
Aslında, <system.webserver>benim durumumda ayarlar yeterliydi, teşekkürler.
marapet

4
system.webServerKlasik ASP çalışırken bile bölüm IIS 7+ tarafından okunur
Tim Lewis

2
customErrors mode = "Kapalı" benim için yaptı
spankmaster79

artık gerekli değildir customErrors(örneğin IIS 7+, ASP.NET, Klasik AppPool için ) tedgustaf.com/blog/2011/5/…
Kiquenet

49

Sitenin IIS yöneticisinde Ana ekranında "ASP" yi çift tıklayın, "Hata Ayıklama Özellikleri" ni genişletin, "Tarayıcıya hata gönder" i etkinleştirin ve "Uygula" yı tıklayın.

Ana ekrandaki "Hata Sayfaları" altında "500" ü, ardından "Özellik ayarlarını düzenle" yi ve "Ayrıntılı Hatalar" ı seçin.

IIS 8.0 (Windows Server 2012) için de aynı adımların geçerli olduğunu unutmayın.


Belki de CLASSIC AppPool (entegre değil) ile IIS 7.5, Windows 2008 R2, ASP.NET 4.5.1 (WebForms) için
geçerlidir

43

Vaclav ve Alex'in cevabını denedikten sonra , IE'de "Kolay HTTP hata mesajlarını göster" i devre dışı bırakmak zorunda kaldım

resim açıklamasını buraya girin


20

In web.config altında

<system.webServer>

satırı değiştir (veya ekle)

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

ile

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

Bunun nedeni, IIS7'nin varsayılan olarak, boru hattının yukarısındaki uygulamalar tarafından oluşturulan 4xx ve 5xx gibi HTTP durum kodlarını engellemesidir.

Ardından, "ASP" bölümünün altında " Hataları Tarayıcıya Gönder " i etkinleştirin ve " Hata Sayfaları / Özellik Ayarlarını Düzenle " altında "Ayrıntılı hatalar" ı seçin.

Ayrıca, Web sitesi klasöründe IIS_IUSRS yerleşik grubuna Yazma izinleri verin .


1
Güç kabuğu kullanıcı eşdeğeri için, çalıştırın:Set-WebConfigurationProperty '/system.WebServer/httpErrors' -Name errorMode -Value Detailed
Blaskovicz

20

TLDR: Öncelikle hatayı boru hattından nereden aldığınızı belirleyin (hatanıza benzeyen bir şeyin ekran görüntülerini aramak için kaydırın), yeni bir şey almak için değişiklikler yapın, tekrarlayın.

Öncelikle hangi hata mesajını gördüğünüzü belirleyin.

Burada bulunan dosyayı görüyorsanız ...

% SistemSürücüsü% \ inetpub \ custerr \\ 500.htm

... genellikle şöyle görünür:

IIS Varsayılan 500 hatası

... o zaman ** IIS ** ' de şu anda yapılandırılmış hata sayfasını gördüğünüzü biliyorsunuz ve ASP.net customErrors ayarını, asp hata detay ayarını veya "kolay http hatalarını göster" tarayıcı ayarını değiştirmeniz gerekmiyor.

Birisi değiştiğinde ekran görüntüme güvenmek yerine yukarıda belirtilen yola bakmak isteyebilirsiniz.

"Evet, yukarıda açıklanan hatayı görüyorum ..."

Bu durumda, < httpErrors > ayarını veya IIS Yöneticisi'nde Hata Sayfaları -> Özellik Ayarlarını Düzenle'yi görürsünüz . Bunun varsayılanı errorMode = AyrıntılıLocalOnly sunucu düğümü düzeyinde (site düzeyinin aksine) , yani bu yapılandırılmış hata sayfasını uzaktayken göreceksiniz, ancak sunucuda yerel olarak oturum açabilmeniz ve tam olarak böyle bir şey görünmelidir hatası:

Ayrıntılı HTTP Hatası

Geçerli hatayı düzeltmek için o noktada ihtiyacınız olan her şeye sahip olmalısınız.

"Ama sunucuda gezinirken bile ayrıntılı hatayı göremiyorum"

Bu birkaç olasılık bırakır.

  1. Sunucuda kullandığınız tarayıcı, bağlantı ayarlarında bir proxy kullanacak şekilde yapılandırılmıştır, böylece "yerel" olarak görülmez.
  2. Aslında göz attığınızı düşündüğünüz siteye göz atmıyorsunuz - bu genellikle bir yük dengeleyicisi olduğunda olur. DNS'nin size sunucuda veya başka bir yerde bir IP verip vermediğini görmek için bir ping kontrolü yapın.
  3. Sitenizin httpErrors ayarları yalnızca "Özel" olarak ayarlanmış. "AyrıntılıKonumuOnly" olarak değiştirin. Ancak, bir yapılandırma hatası varsa, site düzeyi httpErrors da bir yapılandırma öğesi olduğundan bu çalışmayabilir. Bu durumda # 4'e geçin
  4. Tüm siteler için httpErrors varsayılanı "Özel" olarak ayarlanmıştır. Bu durumda, IIS Yöneticisi'nde (belirli bir siteyi değil) üst düzey sunucu düğümünü tıklatmanız ve httpErrors'u değiştirmeniz gerekir oradaki ayarlarını AyrıntılıLocalOnly olarak . Bu dahili bir sunucuysa ve hassas bilgileri açıklama konusunda endişelenmiyorsanız, sunucudan başka istemcilerden gelen hatayı görmenizi sağlayacak olan "Ayrıntılı" olarak da ayarlayabilirsiniz.
  5. Sunucuda UrlRewrite gibi bir modül eksik (bu beni çok ısırıyor ve httpErrors ayarlarından bağımsız olarak genellikle genel mesajı veriyor).

"Sunucuda oturum açmak benim için bir seçenek değil"

Uzaktan görebilmeniz için sitenizin http Hatalarını "Ayrıntılı" olarak değiştirin . Ancak işe yaramazsa, hatanız zaten bir yapılandırma hatası olabilir, hemen yukarıdaki # 3'e bakın. Böylece # 4 veya # 5 ile sıkışmış olabilirsiniz ve sunucu ekibinizden birine ihtiyacınız olacak.

"Yukarıda açıklanan hata sayfasını görmüyorum. Farklı bir şey görüyorum"

Bunu görürsen ...

resim açıklamasını buraya girin

... ve böyle bir şey görmeyi umuyorsun ...

resim açıklamasını buraya girin

... sonra Site -> IIS -> ASP -> Hata Ayıklama Özellikleri altında IIS Yöneticisi'nde "Tarayıcıya hata gönder" değerini true olarak değiştirmeniz gerekir

Bunu görürsen ...

yani kolay hatalar 1

veya bu...

yani kolay hatalar 2

... tarayıcınızdaki kolay hataları devre dışı bırakmanız veya tarayıcınızın size göstermek için seçtikleri gerçek yanıta bakmak için kemancının web görünümünü kullanmanız gerekir.

Bunu görürsen ...

Özel hatalar etkin

... sonra özel hatalar çalışıyor ama özel bir hata sayfanız yok (elbette bu noktada klasik asp değil .net hakkında konuşuyordunuz). Web.config dosyasındaki customErrors etiketinizi sunucuda görüntülemek için RemoteOnly olarak veya uzaktan görüntülemek için Kapalı olarak değiştirmeniz gerekir.

Siteniz gibi stilize edilmiş bir şey görürseniz, özel hataların büyük olasılıkla Açık veya UzakKontrol ve özel sayfayı görüntülemesi (örneğin MVC'de Views-> Shared-> Error.cshtml). Bununla birlikte, birisinin httpErrors için IIS'deki sayfaları değiştirmesi pek mümkün değildir, ancak bu nedenle ilk bölüme bakın.


9

"existingResponse" httpErrors özniteliğinin değerini "PassThrough" olarak ayarlamayı deneyin. Benimki, YSOD'un görüntülenmemesine neden olan "Değiştir" olarak ayarlandı.

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

2
customErrors asp.net içindir. httpErrors IIS7 içindir ve bu nedenle .net işleyicisinden geçmeyen içeriği işleyin (örn. .png, .js vb.) .net olmayan içerik türleri için hata sayfaları istiyorsanız, IIS hata sayfalarını (IIS7 için httpErrors) kullanın. , IIS6 için kullanıcı arabirimi.) customErrors özniteliği, .net kodu bir özel durum (404, 403, 500 vb.) atarken ve httpErrors özniteliği IIS'nin bir özel durum atarken kullanılır. Bunun nedeni, IIS7'nin varsayılan olarak, boru hattının yukarısındaki uygulamalar tarafından oluşturulan 4xx ve 5xx gibi HTTP durum kodlarını engellemesidir.
Kiquenet

6

Kimsenin bahsetmediği bir şey çok hızlı ve geçici bir düzeltme, hatayı o web sunucusunun yerel ana bilgisayarında görebilirsiniz.


1
Vaclav'ın cevabında görünen üçüncü seçenek seçilirse.
ricksmt

3

Ayrıca, ana web sitesi klasörünüzü ( c:\inetpub\wwwroot) başka bir klasöre değiştirdiyseniz, siteye okuma izni vermeniz gerektiğini doğrulayabilirsiniz. , yeni klasördeki IIS_IUSRS grubuna .


3

HER ŞEYİ deneyen ve sadece benim gibi hata ayrıntılarını gösteremeyen bazı insanlar, farklı yapılandırma düzeylerini kontrol etmek iyi bir fikirdir. Web sitesi düzeyinde ve Uygulama düzeyinde (web sitesi içinde) her ikisini de kontrol eden bir yapılandırma dosyası var. Ayrıca, ortaya çıktığı gibi, IIS'deki en yüksek düğümde (Başlangıç ​​Sayfası'nın hemen altında, web sunucularının bilgisayar adıyla aynı adı taşıyan) Ayrıntılı Hatalar devre dışı bırakıldı. Oradaki Hata Sayfalarını kontrol edin.



1

Tarayıcıyı sunucuda çalıştırır ve projenizin URL'sini yerel ip ile test ederseniz, genel bir hata sayfası (örneğin 500 hata sayfası) olmadan o projenin tüm hatalarını aldınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.