.NET Core'da geliştirilen bir web sitesini deploy ettikten sonra kötü bir sürpriz olarak çıkabilen 500.30 ve 500.31 hataları, çok açıklayıcı görünmeyebiliyor ve bazen akla pek gelmeyen bir sorundan kaynaklanabiliyor. Bu yazıda bu hataların kendi tecrübemdeki kaynaklarını ve çözümlerini sizlerle paylaşacağım.
"500.30 ASP.NET Core app failed to start" hatası
Bu hatanın kendi tecrübemdeki kaynağı, web uygulaması çalışmaya başladığında SQL sunucusunun henüz hazır olmaması (veya SQL sunucusunun hiç çalışmaması). "Rastgele" karşınıza çıkıyor gibi görünen sorunun kaynağını anladığımda neden rastgele olduğu da anlaşılıyor.
![](/images/news/2024-08-30_02-12-23-asp-net_core-500-30-error-inline.png)
Sorun şu: Örneğin sunucunuzu baştan başlattığınızda, IIS (Internet Information Server) eğer MS SQL hizmetinden önce başlarsa, kodunuz tam anlamıyla çöküyor ve bir daha SQL sunucusuna bağlanmayı denemiyor. Sorunun bu olduğunu doğrulamak için Olay Görüntüleyicisi'ne (Event Viewer) bakabilirsiniz. Olay Görüntülüleyicisi'nde Windows Günlükleri > Uygulama altında, adında SQL geçen hatalara göz atın.
Hızlı çözüm: IIS'yi veya IIS içinden web sunucunuzu yeniden başlatın.
Kalıcı çözüm: Bu çözümün çalışıp çalışmadığından emin değilim. GitHub Copilot'a göre Startup kodunuzun ConfigureServices metodunda EnableRetryOnFailure seçeneğini kullanarak SQL sunucusuna yeniden bağlanmayla ilgili ayarları yapılandırabilirsiniz.
Örnek kod:
Action<SqlServerDbContextOptionsBuilder> sqlServerOptionsAction = sqlOptions => { sqlOptions.EnableRetryOnFailure( maxRetryCount: 5, // Yeniden deneme sayısı maxRetryDelay: TimeSpan.FromSeconds(40), // Yeniden denemeler arasındaki maksimum saniye errorNumbersToAdd: null); // Belirli hatalarda yeniden denemek için hata kodları }; services.AddDbContext<YourDbContext>(options => { options.UseSqlServer( Configuration.GetConnectionString(AppExtensions.GetDbConnectionName()), sqlServerOptionsAction); });
Alternatif çözüm: İlk çözüm işe yaramadıysa web sitesini yeniden deploy etmeniz de sorunu çözebilir.
Sorunun ikinci olası nedeni
Eğer "500.30 ASP.NET Core app failed to start" hatasını rastgele değil de her zaman alıyorsanız, kodunuz SQL sunucusuna bağlanırken oturum açma sorunu yaşıyor olabilir. Emin olmak için ayrıntılı hataları etkinleştirip, exception'ın ayrıntılarına bakın.
Hata günlüğü kaydetmeyi etkinleştirme:
Ayrıntılı hataları etkinleştirmek için projenin kök dizinindeki web.config dosyasını açın ve stdoutLogEnabled seçeneğinin değerini "true" olarak ayarlayın. Bunu yaptığınızda projenin kök dizininde bir Logs klasörü oluşturulacak ve içindeki metin dosyaları, size ipucu verebilecek hataları içerecek.
"HTTP Error 500.31 - Failed to load ASP.NET Core runtime hatası"
Bu hata sunucuyu yeni kurduğumda başımı biraz ağrıttı, çünkü runtime'lar yüklü görünüyordu. Kendi tecrübelerimde sorunun olası nedenlerini aşağıda sıralıyorum.
- Bazen bir dosyanın uygulama klasörüne eksik kopyalanmış olması bu soruna yol açabiliyor. Klasörde 0 bayt görünen dosyalara göz atın, veya dosyaları doğrudan prodüksiyon sunucunuza tekrar kopyalamayı veya deploy etmeyi deneyin.
- Sorunun daha ilginç bir nedeni, ASP.NET Core runtime'ının değil de projenizin ihtiyaç duyduğu diğer bir runtime'ın eksik olması. Bunun hangisi olduğunu hata günlüklerini inceleyerek görebilirsiniz (aynı bilginin Olay Görüntüleyicisi'nde görünüp görünmediğini hatırlamıyorum). Hata günlüklerini nasıl etkinleştireceğinizi yukarıda "Hata günlüğü kaydetmeyi etkinleştirme" altında anlattım.
Eksik olan runtime'a karşılık gelen Nuget paketini yüklediğimde sorun ortadan kalktı.
Sonuç
Yukarıdaki çözümlerin bu hataları alanların yardımına yetişeceğini umuyorum, ancak bu hataların başka sebepleri de olabiliyor. Biraz araştırarak çözeceğinizden eminim; size tavsiyem nasıl çözdüğünüzü not etmeniz çünkü 1 sene sonra aynı hatayla karşılaştığınızda nasıl çözdüğünüzü unutmuş olabiliyorsunuz. Tecrübenizi bizlerle aşağıda yorumlarda paylaşmanız da, başkaları için faydalı olabilir.