How determine if application is web application
In a core assembly, which is run both in a windows service, and in a web application, I need to store information per user session. The service will have a single user session, and the web application uses HttpContext.Current.
I want to configure which method to use within the core assembly - convention over configuration. I want to do this only once, and I believe HttpContext.Current will be null when run from Application_Start.
How can I reliably determine if the application is a web application?
if(HttpRuntime.AppDomainAppId != null)
{
//is web app
}
else
{
//is windows app
}
I'd go for
HostingEnvironment.IsHosted
Note that there is a slight overhead incurred when you're using a method from an assembly like this, even when you don't intend to use it. (System.Web will be loaded and several classes could be initialized and JITed.) Also, there's a hard dependency on System.Web now, so you can't use it in a limited framework setting (currently IIRC only with the Client Profile).
Another way (although not as neat and documented), is to check
Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)
If this returns web.config
(or a casing variant thereof), it's probably a web application. (Although you can setup any appdomain with a config file named web.config
, this is not a likely scenario.) This avoids taking a dependency on System.Web.
However, HostingEnvironment.IsHosted
is intended to indicate whether an appdomain is configured to run under ASP.NET.