Try/Catch In Global.asax While Logging Errors To Db Needed
Nov 3, 2010
So I handle all exceptions in my project within my Global.asax page. For example, on a random page I could have:
[code]....
So my question is in the Application_Error method, do I need the try/catch block when trying to write to the database? I'm thinking I would in case something goes wrong with the connection, etc. - but is this really necessary? Also, what would I do in the catch block if there is an error? At that point I would be catching the error of logging an error which is confusing in its own right.
If I am just logging exception details in my web app, do I really need to put in exception handling logic for each tier? Why not just let them all bubble up the stack trace to the global.asax and log them there?
I'm trying to use the Global.asax file in the root application of the website to catch requests for pdf files in the root that don't exist any more. I've configured iis to send pdf requests to asp.net. The whole thing works perfectly on development. It also works on the live system with missing .aspx pages, but not .pdf. Instead an "Error Code 64: Host not available". I'm using the Global.asax file to avoid the web.config and child applications (1.1 & 2.0) inheriting settings.
Edit:
I configured IIS to send .pdf requests to asp.net using the Application Configuration dialog on the mappings tab and adding .pdf extension mapped to the aspnet_isapi.dll. "Verify that file exists" is turned off (although I've also tried it turned on).
Looking for best practice focused answers here with explanations.
Should the presentation layer of an ASP.Net app catch and handle exceptions thrown from the business layer, or should these be allowed to bubble out, where they can all be logged and handled uniformly in the Global.ascx's Application_Error handler?
I'm using a static Timer in my Global.asax to run a method at regular intervals. When the method throws an exception, my application is stopped. I have used an empty catch to prevent exceptions from stopping the application something like below code. Is there a disadvantage to use such an approach?
I'm getting a very peculiar problem with my asp.net application, it took me an age to track down but I still don't know what is causing this behaviour.
If I set a session variable in the Application_PreRequestHandlerExecute event, then my external JavaScript files are ignored, and therfore causing a raft of errors. I have simplified the problem below.
E.g.
I have file called JScript.js containing the code:
function myAlert() { alert("Hi World"); }
And in my Default.aspx file I reference the js with the code:
And in the body onload event I call the myAlert() function:
<body onload="myAlert()">
And finally in the Global.asax file:
Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs) HttpContext.Current.Session("myVar") = "MyValue" End Sub
If you run the Default.aspx file you will see the js function isnt called, however, if you comment out the line of code Global.asax then the external js is called and the function executed when the page loads.
I am handling errors in Global.asax. When I encounter an error in certain pages, the Application_Error event fires twice. On the second trip, Server.GetLastError() returns null. I have a simple page where I throw an error in page load. When that page throws an error the code below works fine. I also have a more complex page with an update panel and many controls. When that page throws an error Application_Error fires twice. I suspect the update panel but update panels are always suspect, right?
There are no try/catch blocks on any of my pages I'm testing with. Custom errors in web.config is commented out. Note that logging and busywork in the Application_Error event are commented out. I'm pretty much just doing a respone.redirect. The problem with the the event firing twice is that the response.redirect fails with an error msg stating that headers have already been sent (adding Context.ClearError and Response.Clear does nothing to fix that).
Fine and dandy... I like that mode="RemoteOnly" facilitates development...
For unhandled exceptions, I have in global.asax:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Response.Redirect("GenericError.aspx") End Sub
However, unhandled exceptions are going to the generic error page instead of the informative yellow screen of death preferred by developers. I can comment out the redirect in global.asax, but then I need to remember to change it for the production environment. Is there a way I can check in Application_Error whether I am remote or not to determine whether to redirect?
I know there is a couple answered questions on here regarding "request scoped" globals, but I want to nit-pick on something specifically and maybe squeeze some extra enlightenment out of one or two of you.I have an ASP.NET C# Website and a static Dictionary of objects (loaded from DB once on Application start). Each page request will need to do a lookup in the Dictionary (based on a key derived from the request url/etc) and get the appropriate object.The issue is I'm trying to maximize efficiency by reducing the lookups to the Dictionary per Request. Doing just a single lookup within a Page itself is easy enough and I can pass the object to sub controls, etc too.. but global.asax is separate from the Page and it also needs to use the object (in Application_BeginRequest and Session_Start).
So is doing a Dictionary lookup once in Application_BeginRequest, once (when necessary) in Session_Start and once in the Page negligible speed wise, even if there are many requests coming in every second?I would like it if I could just have a Request scoped global variable that I can easily call upon.. the only one I see available though is HttpContext.Current.Items and that is a Dictionary itself.Am I beingridiculously nit-picky with my concern over efficiency? or will these milliseconds (nanoseconds?) get me in the long run when more and more requests are being made?
PS. I currently only have around 100 objects in the Dictionary although this may increase in the future.
I've just starting looking at a site in place at work. They're using Elmah to log errors.It seems to be logging fine, but in the web interface, when I tell Elmah to show me 100 errors per page, it only shows the most recent 15.Then when I click on "Download Log" I only get shown 15 errors in the CSV.Anyone know how I can configure it to keep all the errors?Or can someone point me to some docs on how to do this?
I'm using the suggestion from this question: How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?I used Aziz's second code sample.I ran the debugger to see what happens when an error occurs. The main function in the HandleErrorAttribute class is:
public override void OnException(ExceptionContext context) { base.OnException(context);
Is it possible in the global.asax file on session_start to check if a url string exists and it it does insert the string into a sql database? The url would be something link http://www.mysite.com?campaign=january.
I would want to capture the january bit and put that in the database for each visitor that uses that url.
I am running ffmpeg.exe from command prompt through asp.net code. Is there any method to know success and errors of the ffmpeg.exe execution in asp.net code ?
I have a hosting account on DailyRazor.com , i use Global.asax in my project to start a schedule process in Application_Start.When i just publish my website, and upload it, the Application_Start does not Fire, but when i upload the Global.asax to my host it gives an Error but the Applicaiton_Start Event fires up, and then i delete the Global.asax file and everything works.just wondering, What am doing wrong ? or why this meaningless thing happens?
I have a site with multiple domains pointing to it. I wanted to redirect all requests to main domain so I've created a method called RedirectToRealDomain("domain.com") to check and redirect all requests to my preferred domainAt the moment it lives on Session_Start but I am planing to move it to Application_BeginRequest event. As I understand Session_Start only raised when new session started but Application_BeginRequest raised on all requests. RedirectToRealDomain method doesn't do any DB lookups or anything expensive apart from comparing strings.
I am trying to check if the user belongs to someone's friendlist from the database and redirect him accordingly.I am doing this in a routehandler called by Global Asax.I just want to know how to get the username (from the login information) in the route handler class (or Global asax)I used this: string username = HttpContext.Current.User.Identity.Name; and very strangely, its assigning ".aspx" as the username!! ps: i did search for similar question but in vain.
I need replace double slashes in one slash. I am planning do this in Global.asax Application_BeginRequest event. Is it enough? or better do a http module?
UPD Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) ' Fires at the beginning of each request
I'm trying to configure the logging settings to log all events in a database and event viewer but email only errors and warnings. Database and Event Viewer part works fine except that I'm not getting any email for errors.
Note: There isn't any problem with smtp settings because I get event's emails if I add the listener to "General" and "All events" in category sources.
Here is my config: (I'm using Microsoft.Practices.EnterpriseLibrary.Logging 3.1.0.0)
I was under the impression till now that Global.asax is used for application level events and it's a common file for all users. Then what does Session_Start event does in this file. If we have to create user session varaibles then Is this the write place to create those? If someone can kindly clear my confusion on this file and it's methods.
I'm trying to handle all my application exceptions inside the global.asax but from some reason it's not firing at all, i never tried to do it before so i guess i'm doing something wrong here...
here is the code inside the default.aspx page that throw the error:
I'm using the HttpRunTime.Cache.Add to create a routine that runs every 5 mins to post data out of my app to the main DB, and this works fine. However I also need to import some files from disk in this routine. I have my document directory set up in my web.config as a ~/ relative path and resolve this in normal controller actions using Server.MapPath(string). How can I do this in my Global.asax.cs code -when I try to access it, it throws an error?