Accidental Technologist

Musings about Entrepreneurship, Technology and Software Development

  • Home
  • About
  • Still River Software
  • Privacy Policy

Powered by Genesis

You are here: Home / ASP.NET / Application_Start not firing and the Global.asax

Application_Start not firing and the Global.asax

February 24, 2006 by Rob Bazinet

Tweet

I am working on a project in which we converted an existing Visual Studio 2003 C# web application to Visual Studio 2005. I can and probably post a series of entries on all of the issues we faced converting this project but that is for another time. The converted application has been running fine on our development systems pretty well since the conversion occurred. We recently put together some build scripts so we could get our build machine into action. Our build system integrates to our Sourcegear Vault repository, gets the latest code builds from the command line and deploys to a staging server. We got the kinks worked out of our build and deploy process and decided to start testing the application on our staging server. The application fired up and we were able to login without any problems but when going to a page that had controls from Peterblum.com the page would not render and complained about the location of the license files. If any of you have not used the Peter Blum controls they are great controls and Peter offers great support. The only real drawback to them is getting the right files in the right directory and setting a license property on the controls to get his licensing scheme to work. It is a pretty straight-forward task if you do it all the time but we install and forget about it. I went back through the Peter Blum documentation (very good by the way) and tried to see if something was missing in our deployment scripts that would put the license files in the wrong location. This checked out Ok. After a careful debugging session we determined what was happening. The Problem In order to properly setup Peter Blum controls you need to set a license key propery on the controls we are using. This can be done in the Application_Start of the global.asax OR in a place like the Page_load of every page using the controls. The obvious place to set this key is in the Application_Start if you are using these controls in more than one form. This is how we have our configuration. In this configuration our application works fine on our Windows XP development systems but when deployed to a Windows 2003 server running IIS 6 the Application_Start fails to fire. What? You may ask. Yes, it’s true the event we need to fire is not firing. Since we don’t have any real way to debug such a problem on the staging system I changed the place the license key was being set, the Page_Load event. Upon doing this the form loaded fine and the Peter Blum controls worked as before. How can this be happening is the question I had. The Solution It turns out that the problems starts in our .NET 1.1 version of the application and how 1.1 handled the global.asax. This file has a code-behind page named global.asax.cs and all the code you would use for global events such as the Application_Start would be setup in there. This is how we setup ours. As I mentioned, we used the conversion tool in Visual Studio 2005 to convert our web application to .NET 2.0 this way. The conversion ran fine but put the global.asax.cs file in the new App_code directory. This is a bad thing, for some reason the conversion thought it needed to be in there and on development it worked fine so we left it in there. All things pointed to this as the problem. We took the code in the global.asax.cs file and put it in the global.asax removing the gloabal.asax.cs file from our project and re-ran the build scripts, tested and all was good. The Application_Start fired once again. As of ASP.NET 2.0 the global.asax is only one file with no code-behind. I don’t know why the project ever worked as it was but this fixed the problem. Apparently there is a bug in the VS 2005 web application conversion tool that Microsoft should take a look at. Technorati Tags: ASP.NET, C#, Microsoft, Visual Studio

Share this:

  • LinkedIn
  • Twitter
  • Facebook
  • Email
  • More
  • Pinterest
  • Tumblr
  • Pocket
  • Reddit

Related

Filed Under: ASP.NET

Care about your privacy? I do and use Fathom Analytics on this site.

Fathom Analytics

Comments

  1. Peter Blum says

    March 7, 2006 at 10:16 am

    Cool info, Rob. A similar problem exists on ASP.NET 1.x sites. Users forget to copy the Global.asax file to the production server and find Application_Start does not fire. You would think that since they used the code behind file (Global.asax.cs or Global.asax.vb), the compiled code was already in the web application’s assembly file. So the Global.asax file isn’t needed.

    However, it is needed. Nothing in the class “Global” will run without the presence of the Global.asax file.

    So the next time your Application_Start method isn’t running, make sure you copy the Global.asax file to the web app with the problem.

  2. Peter Blum says

    March 7, 2006 at 10:16 am

    Cool info, Rob. A similar problem exists on ASP.NET 1.x sites. Users forget to copy the Global.asax file to the production server and find Application_Start does not fire. You would think that since they used the code behind file (Global.asax.cs or Global.asax.vb), the compiled code was already in the web application’s assembly file. So the Global.asax file isn’t needed.
    However, it is needed. Nothing in the class “Global” will run without the presence of the Global.asax file.
    So the next time your Application_Start method isn’t running, make sure you copy the Global.asax file to the web app with the problem.

  3. Rob Bazinet says

    March 7, 2006 at 10:00 pm

    Peter, good to hear from you.

    Yes, I know about the problem on 1.x sites. We got bit by it. It is a very interesting problem in version 2.0 because the project migration wizard put the global.asax.cs file in the app_code directory. I figured it would know it no longer needed the code behind file.

    We did some work with Microsoft and Scott Guthrie’s team on the Project Migration Wizard prior to the VS 2005 release and we experienced a bunch of bugs that were fixed but not this one. I guess I should send something off to Scott to let him know this one still exists.

    It was your post on the ASP.NET forums that put us on the track to find the solution to this problem.

  4. Rob Bazinet says

    March 7, 2006 at 10:00 pm

    Peter, good to hear from you.
    Yes, I know about the problem on 1.x sites. We got bit by it. It is a very interesting problem in version 2.0 because the project migration wizard put the global.asax.cs file in the app_code directory. I figured it would know it no longer needed the code behind file.
    We did some work with Microsoft and Scott Guthrie’s team on the Project Migration Wizard prior to the VS 2005 release and we experienced a bunch of bugs that were fixed but not this one. I guess I should send something off to Scott to let him know this one still exists.
    It was your post on the ASP.NET forums that put us on the track to find the solution to this problem.

  5. Jon Pierson says

    April 6, 2006 at 6:46 pm

    I’m not sure it this is the same problem but I am using a global.asax file to declare some server side objects using the tag and everything works fine in the development environment. When I deploy or publish the website however the global.asax appears to get compiled and put into the bin folder as App_global.asax.dll. I assume this is just the “code” part of the file and the definitions get lost since I get the error “Object reference not set to an instance of an object.” when I try to access the objects in the ASP.global_asax.Session_Start. If I copy the global.asax with the tags to the production web site it seems to work fine. This appears to be a bug with the deploy.

  6. Jon Pierson says

    April 6, 2006 at 6:46 pm

    I’m not sure it this is the same problem but I am using a global.asax file to declare some server side objects using the tag and everything works fine in the development environment. When I deploy or publish the website however the global.asax appears to get compiled and put into the bin folder as App_global.asax.dll. I assume this is just the “code” part of the file and the definitions get lost since I get the error “Object reference not set to an instance of an object.” when I try to access the objects in the ASP.global_asax.Session_Start. If I copy the global.asax with the tags to the production web site it seems to work fine. This appears to be a bug with the deploy.

  7. Rob Bazinet says

    April 10, 2006 at 8:51 am

    Jon,

    This appears to be similar to what I have encountered. A couple questions:

    1. Is your application running under .NET 2.0?

    2. If yes, did you upgrade the application from .NET 1.x?

    3. Does your Global.asax have a code-behind, Global.asax.cs(vb) assocated with it?

    We saw this same behavior in our upgraded application from 1.1 to 2.0. I am not sure if it’s the converting utility or not but I think it is. I know Microsoft has upgraded it several times.

    The real solution for us was to get rid or the global.asax code-behind file and bring all of our code in-line to the .asax file and all worked well, both in development and in production.

  8. Rob Bazinet says

    April 10, 2006 at 8:51 am

    Jon,
    This appears to be similar to what I have encountered. A couple questions:
    1. Is your application running under .NET 2.0?
    2. If yes, did you upgrade the application from .NET 1.x?
    3. Does your Global.asax have a code-behind, Global.asax.cs(vb) assocated with it?
    We saw this same behavior in our upgraded application from 1.1 to 2.0. I am not sure if it’s the converting utility or not but I think it is. I know Microsoft has upgraded it several times.
    The real solution for us was to get rid or the global.asax code-behind file and bring all of our code in-line to the .asax file and all worked well, both in development and in production.

  9. jeff says

    July 31, 2006 at 7:06 pm

    I’ve noticed the same problem when converting VB.net web projects from 2003 to 2005. I’ve noticed however, that the Global class (defined within Global.asax.cs) doesn’t get compiled into the assembly (verified by using Reflector post-build) when the class is embedded within a Namespace block. When I don’t wrap it up in a Namespace block – the class exists in the build output!

  10. jeff says

    July 31, 2006 at 7:06 pm

    I’ve noticed the same problem when converting VB.net web projects from 2003 to 2005. I’ve noticed however, that the Global class (defined within Global.asax.cs) doesn’t get compiled into the assembly (verified by using Reflector post-build) when the class is embedded within a Namespace block. When I don’t wrap it up in a Namespace block – the class exists in the build output!

  11. Rob Bazinet says

    July 31, 2006 at 8:27 pm

    Thank you for the reply. Yes, this makes perfect sense, the team working on ASP.NET is one in the same and the design of how the conversion work was the same.

    So wrapping it up in the namespace takes care for the issue for you going forward?

  12. Rob Bazinet says

    July 31, 2006 at 8:27 pm

    Thank you for the reply. Yes, this makes perfect sense, the team working on ASP.NET is one in the same and the design of how the conversion work was the same.
    So wrapping it up in the namespace takes care for the issue for you going forward?

  13. jeff says

    August 1, 2006 at 1:27 pm

    Sorry about that post – I think I responded prematurely. It turned out that it was a namespace behavior in VB.net that I was not aware of. If you have a root namespace defined for the assembly (eg Root.Namespace) and you declare a namespace in one of your code files such as:

    Namespace Root.Namespace.SubNs

    Public Class Test

    End Class

    End Namespace

    The Test class will be compiled as: Root.Namespace.Root.Namespace.SubNs.Test, and not as Root.Namespace.SubNs.Test, like I had expected. It appears that VB.net’s compiler behaves differently than c#.

  14. jeff says

    August 1, 2006 at 1:27 pm

    Sorry about that post – I think I responded prematurely. It turned out that it was a namespace behavior in VB.net that I was not aware of. If you have a root namespace defined for the assembly (eg Root.Namespace) and you declare a namespace in one of your code files such as:
    Namespace Root.Namespace.SubNs
    Public Class Test
    End Class
    End Namespace
    The Test class will be compiled as: Root.Namespace.Root.Namespace.SubNs.Test, and not as Root.Namespace.SubNs.Test, like I had expected. It appears that VB.net’s compiler behaves differently than c#.

  15. Rob Bazinet says

    August 1, 2006 at 1:31 pm

    Ah, great to know. I was under the impression the source of this problem was very similar to mine and caused from the VS 2003 -> VS 2005 conversion. The behavior you described was identical.

    Thanks for the update.

  16. Rob Bazinet says

    August 1, 2006 at 1:31 pm

    Ah, great to know. I was under the impression the source of this problem was very similar to mine and caused from the VS 2003 -> VS 2005 conversion. The behavior you described was identical.
    Thanks for the update.

  17. Kelvin Tse says

    January 4, 2007 at 5:36 pm

    We package the site in an installation package (msi) file. We’ve the application_start not firing problem when the package is installed on production server. The package runs fine on QA and dev server. We use the Web Deployment project to pre-compile to a single assembly. The QA and production server has the same configuration: Windows 2000 server, IIS 5.0, .Net 2.0 framework. We have a code-behind file for Global.asax. The output of the Web Deployment product does not contain Global.asax because it’s compiled into the single assembly. The marker file bin\App_Global.asax.compiled points to the correct assembly (see http://www.velocityreviews.com/forums/t300292-web-deployment-projects-globalasax-problem.html).

    Finally we found the problem: We use the ReportViewer control and the ReportViewer Redistribute 2005 is not installed on the production server.

    Hint of the cause of the problem comes when we copy the source code to a virtual directory on the production server. When we try to bring up a page, we got an error saying it can’t find the ReportViewer assembly referenced in the web.config file.

  18. Kelvin Tse says

    January 4, 2007 at 5:36 pm

    We package the site in an installation package (msi) file. We’ve the application_start not firing problem when the package is installed on production server. The package runs fine on QA and dev server. We use the Web Deployment project to pre-compile to a single assembly. The QA and production server has the same configuration: Windows 2000 server, IIS 5.0, .Net 2.0 framework. We have a code-behind file for Global.asax. The output of the Web Deployment product does not contain Global.asax because it’s compiled into the single assembly. The marker file binApp_Global.asax.compiled points to the correct assembly (see http://www.velocityreviews.com/forums/t300292-web-deployment-projects-globalasax-problem.html).
    Finally we found the problem: We use the ReportViewer control and the ReportViewer Redistribute 2005 is not installed on the production server.
    Hint of the cause of the problem comes when we copy the source code to a virtual directory on the production server. When we try to bring up a page, we got an error saying it can’t find the ReportViewer assembly referenced in the web.config file.

  19. Jin says

    January 30, 2007 at 2:03 am

    @Jon Pierson

    Hi Jon, im encountering the exact same problem as you did. How did you go about fixing it to make it work in the production server. My applcation runs perfectly on my local machine but after i deployed it using the Publish Website feature. The objects i defined in the Global file are all complaining about “Object reference not set to ……”

    Help Help!!

    Regards

    Jin

  20. Jin says

    January 30, 2007 at 2:03 am

    @Jon Pierson
    Hi Jon, im encountering the exact same problem as you did. How did you go about fixing it to make it work in the production server. My applcation runs perfectly on my local machine but after i deployed it using the Publish Website feature. The objects i defined in the Global file are all complaining about “Object reference not set to ……”
    Help Help!!
    Regards
    Jin

  21. Damian Spaulding says

    July 17, 2007 at 9:20 am

    My solution:

    I downloaded an update / plugin for Visual Studio from that allowed me to develop a ?Web Project? just like I would be develop a ?Windows Project?. This type of project is completely different from the ?Web Site? technology that comes with Visual Studio ?out of the box? when you first purchase it. I think the plugin is called something like: “Web Deployment Projects Plugin for VS2005?. ? I can try to source out where I got the files again if you have trouble finding it. You will know you have this feature installed when you can perform: File -> New -> Project -> ASP.NET Web Application

    After that update was installed, I installed a second addition / plugin to my Visual Studio that allowed me to convert all of my project files to a ?Web Application?. ? This is an important step for the project?s success. You know you have this plugin installed when you can right click on the solution in your solution explorer and select ?Convert to Web Application?. If you do not have this plugin installed, you will not see this option.

    After that step was complete, my web project actually resembled more of a windows application then a .net website. I now have for example:

    Default.aspx,

    Default.aspx.cs

    and Default.aspx.designer.cs.

    Also, now all of the ?inherits? attributes work as they are supposed to in a web application. Before now you could have had many aspx files ?inherit? the same code behind because the compiler was not really compiling this attribute properly.

    Before this step, the inherits attribute was there but was not built into the solution correctly. If this is unclear, I can explain this in another posting.

    Ok now that you have created a ASP.NET Web Application, Copied all of your old site content files to your solution explorer, converted your new application to a Web Application, you may have a lot of build errors because the application will compile your project more strictly then it used to. If you get no build errors, congratulations on proper web application design. ?

    Ok. Now about the global.asax compile issues:

    When this new type of project builds, the code behind of the global.asax file gets built right into the dll for the solution so there is no need to mess with global.asax compile issues, file placement, ?flat? architecture or any of that jazz. In fact I still have my global.asax code running as a code behind quite successfully.

    Simply upload your new project to your new server either by publishing or copying your development file, not forgetting any differences you might need in your web-config for your production server (SQL connection strings etc.) and your site should work fine.

    I am behind on my project now, so I must get back to work. If you need to contact me for any reason, you can do so through one of my websites:

    http://www.thebestofalltime.com

    http://www.thechristiannewsnetwork.com

    Good luck everyone!

  22. Damian Spaulding says

    July 17, 2007 at 9:20 am

    My solution:
    I downloaded an update / plugin for Visual Studio from that allowed me to develop a ?Web Project? just like I would be develop a ?Windows Project?. This type of project is completely different from the ?Web Site? technology that comes with Visual Studio ?out of the box? when you first purchase it. I think the plugin is called something like: “Web Deployment Projects Plugin for VS2005?. ? I can try to source out where I got the files again if you have trouble finding it. You will know you have this feature installed when you can perform: File -> New -> Project -> ASP.NET Web Application
    After that update was installed, I installed a second addition / plugin to my Visual Studio that allowed me to convert all of my project files to a ?Web Application?. ? This is an important step for the project?s success. You know you have this plugin installed when you can right click on the solution in your solution explorer and select ?Convert to Web Application?. If you do not have this plugin installed, you will not see this option.
    After that step was complete, my web project actually resembled more of a windows application then a .net website. I now have for example:
    Default.aspx,
    Default.aspx.cs
    and Default.aspx.designer.cs.
    Also, now all of the ?inherits? attributes work as they are supposed to in a web application. Before now you could have had many aspx files ?inherit? the same code behind because the compiler was not really compiling this attribute properly.
    Before this step, the inherits attribute was there but was not built into the solution correctly. If this is unclear, I can explain this in another posting.
    Ok now that you have created a ASP.NET Web Application, Copied all of your old site content files to your solution explorer, converted your new application to a Web Application, you may have a lot of build errors because the application will compile your project more strictly then it used to. If you get no build errors, congratulations on proper web application design. ?
    Ok. Now about the global.asax compile issues:
    When this new type of project builds, the code behind of the global.asax file gets built right into the dll for the solution so there is no need to mess with global.asax compile issues, file placement, ?flat? architecture or any of that jazz. In fact I still have my global.asax code running as a code behind quite successfully.
    Simply upload your new project to your new server either by publishing or copying your development file, not forgetting any differences you might need in your web-config for your production server (SQL connection strings etc.) and your site should work fine.
    I am behind on my project now, so I must get back to work. If you need to contact me for any reason, you can do so through one of my websites:
    http://www.thebestofalltime.com
    http://www.thechristiannewsnetwork.com
    Good luck everyone!

  23. Rob Bazinet says

    July 17, 2007 at 10:18 pm

    Wow Damian, great comment. I think you have a couple tools I didn’t have when I faced these issues.

    I am aware of the first tool for Web Project but I am not aware of the tool that will Convert to a Web Application. I think you found a nice solution to these type of problems.

    If you can find links to these tools please comment again so I can post a follow-up to my original post.

    Thanks.

  24. Rob Bazinet says

    July 17, 2007 at 10:18 pm

    Wow Damian, great comment. I think you have a couple tools I didn’t have when I faced these issues.
    I am aware of the first tool for Web Project but I am not aware of the tool that will Convert to a Web Application. I think you found a nice solution to these type of problems.
    If you can find links to these tools please comment again so I can post a follow-up to my original post.
    Thanks.

  25. Akhilkumar Patel says

    October 2, 2008 at 7:22 am

    There is a strange behavior of the application_start event on windows 2003 based server. On that server the application_start method is executing every time while user send a request (means session started). Same build is working properly on XP based box.
    On windows 2003 server I have IIS 6.0 while XP box have IIS 5.1. So what will be the problem ?
    Is there any specific thing I need to take care means special configuration like session state, identity etc.?
    Please let me know if anything required for clarification?

  26. Akhilkumar Patel says

    October 2, 2008 at 7:22 am

    There is a strange behavior of the application_start event on windows 2003 based server. On that server the application_start method is executing every time while user send a request (means session started). Same build is working properly on XP based box.

    On windows 2003 server I have IIS 6.0 while XP box have IIS 5.1. So what will be the problem ?

    Is there any specific thing I need to take care means special configuration like session state, identity etc.?

    Please let me know if anything required for clarification?

  27. ani says

    August 5, 2009 at 11:36 pm

    how to create Application_Start
    function in asp.net send answer to
    [email protected]

  28. ani says

    August 5, 2009 at 11:36 pm

    how to create Application_Start

    function in asp.net send answer to

    [email protected]

  29. cheap nfl jerseys says

    September 7, 2009 at 9:19 pm

    Thanks,
    Im always confused…

  30. cheap nfl jerseys says

    September 7, 2009 at 9:19 pm

    Thanks,

    Im always confused…

Recent Posts

  • How to Fix Rails Flash Rendering When Using Hotwire
  • Hotwire Fix for CORS Error when using Omniauth
  • Fix Installation of Ruby using rbenv on macOS Big Sur
  • RailsConf 2021 and the Future of Conferences
  • Fixing Out of Diskspace Errors on Amazon EC2

Categories

Services I Love

HatchBox - Easy Rails Deploys Fathom Analytics
Follow @rbazinet

Rob Bazinet
@rbazinet

  • Exactly this…. https://t.co/yWj7fZ01HR
    about 21 hours ago
  • https://t.co/EmagdpLoNv "Introducing GitHub Copilot X · GitHub"
    about 1 day ago
  • RIP Gordon Moore: https://t.co/c5J9LaHrj8
    about 1 day ago
  • Our daughter works as a teaching assistant at a local K-8 public school. It’s become apparent that students today r… https://t.co/p2t912GVyc
    about 2 days ago
  • Working to wrap up my current consulting gig by mid-April. I will be looking for the next thing soon. If anyone has… https://t.co/sg3cSV9yqM
    about 3 days ago
  • RSS - Posts
  • RSS - Comments
Find me on Mastodon