How determine if application is web application

后端 未结 5 1408
轻奢々
轻奢々 2020-11-29 06:39

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 sessi

相关标签:
5条回答
  • 2020-11-29 06:54

    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.

    0 讨论(0)
  • 2020-11-29 06:56
    if(HttpRuntime.AppDomainAppId != null)
    {
      //is web app
    }
    else
    {
      //is windows app
    }
    
    0 讨论(0)
  • 2020-11-29 06:58

    In web application Assembly.GetEntryAssembly() is null. I use it in two libraries and so far it works great.

    0 讨论(0)
  • 2020-11-29 07:04

    Just so no one else are making the same mistake as me.

    Assembly.GetEntryAssembly() do not work to define if its an web application or a not. When it's running as a service then Assembly.GetEntryAssembly() are null, but when i debug from VS, it's not null.

    0 讨论(0)
  • 2020-11-29 07:07

    If possible I'd suggest having it as an input parameter to some initialize method in the class library that would need to be called before the class library can be used.

    If that's not an option I'd look at HttpRuntime.Cache which I think would be non null even if HttpRuntime.Current is null. I'm not a webforms guy but I remember someone mentioning that for a similar question sometime somewhere (can't find that question now).

    0 讨论(0)
提交回复
热议问题