webForumDet fria alternativet

Global.asax Application_Error fångar inte allt..?

.NET

4 svar · 322 visningar · startad av CokeLight

Medlem sedan juni 2000504 inlägg
Frågan#1

Sökte lite på webforum o hittade den här tråden

Länk

där det verkade som att alla typer av fel ändå fångades upp.. stämmer det.. hos mig fungerar det inte..? Som personen skrev fångades vissa fel upp men inte andra, hos mig t.ex. inte SqlException.. om en Session är tom händer heller inte någonting.. det gick iofs att lösa genom att i Session_Start kolla om den aktuella session var tom, köra en redirect (för att be användaren logga in igen t.ex).

Antingen kunde jag ju ta bort try/catch eller köra en throw(ex) och jag trodde att Global.asax skulle fånga felet.. men det funkar inte.. (jag provade t.ex. att ändra i web.config så att databasen inte hittades) sen provade jag att, i Global.asax, lägga in protected void Page_Error (det stämmer eller?)

Så jag undrar alltså om det stämmer att Global.asax ska fånga ALLA unhandled exceptions eller bara vissa..?

(Även om FormsAuthentication tvingar tillbaka användaren till login sidan ska väl Global.asax fungera som vanligt o kolla om db-kopplingen fungerar?)

Medlem sedan apr. 20012 266 inlägg
#2

Tror det beror på var Exceptions kastas, har dock inte kommit på hur det fungerar mer än att det inte verkar vara några problem att skriva en egen HttpModule som tar hand om felen.

Medlem sedan maj 20012 812 inlägg
#3

Är ganska säker på att alla fel som du inte hanterar själv fångas av Application_Error() har inte haft några som helst problem med det.

Dock skall man låta bli att lägga så mycket kod logik i global.asax, utan man bör, ta emot felet och sedan skicka det vidare till en annan sida. Så här ser min felhantering ut i global.asax.

			//-- Get exception
			Exception ex = Server.GetLastError();
			//-- clear response
			HttpContext.Current.Response.Clear();
			//-- transfer to error page
			Server.Transfer("/EnterpriseGateway/WebForms/error.aspx");

Och sedan i felsidan så tar man emot felet och behandlar det:

				//-- Get the last exception
				Exception exception = Server.GetLastError();
				if(exception.InnerException != null)
					exception = exception.InnerException;

				//-- Log error
				WriteExceptionMessageToLogger(exception);

				//-- Write exception message to page
				WriteExceptionMessageToPage(exception);

Det fungerar hur bra som helst, tyvärr har man då låst sin felhantering så att man inte kan slå på/av den i web.config men det kan man säkert överleva...

- M

Medlem sedan juni 2000504 inlägg
#4

Hejsan (fick möjlighet att svara först nu) aha.. det var intressant.. så om du kör Server.Transfer istället för Response.Redirect får du alltså med dig, på nåt sätt, det/de Exception som fångades av Global.asax?? Själv sparade jag Message, TargetSite etc i variabler som jag sen skickade med QueryString till error.aspx.. men det där blev ju mycket renare kod som du hade... (om det fungerar såsom jag tror : )

aha.. du menar också att saker som just står i Global.asax inte kan påverkas från web.config, o därför inte kan slås på/av? oki..

Men okay, apropå själva frågan.. hmm.. bra att den ska fånga alla fel.. i så fall är det jag som måste kodat fel nånstans.. ska felsöka lite till.. tack för all input :)

Medlem sedan maj 20012 812 inlägg
#5

aha.. du menar också att saker som just står i Global.asax inte kan påverkas från web.config, o därför inte kan slås på/av? oki..

Det finns ju felhanterings attribute i web.config, där man ställer in vilken sida man skall gå till osv osv. Denna information kommer inte att fungerar tillsammans med koden i Application_Error().

Du kommer helt enkelt inte att gå till den sida som står i web.config utan det som står i global.asax och den koden är kompilerad så det betyder att du måste kompilera om din kod om du vill ändra detta. Man kan säkert lösa det genom att läsa värden från en externkälla vart man vill gå och om man vill visa den sida, typ en databas/xml-fil osv osv...

- M

279 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
139 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)