如何确定.NET代码是否正在ASP.NET进程中运行
本文关键字:NET ASP 进程 运行 何确定 代码 是否 | 更新日期: 2023-09-27 17:47:47
我有一个通用类的实例,它将在ASP.NET和独立程序。此代码对它所在的进程有意义正在运行-也就是说,如果在ASP.NET下运行。如何确定代码是否在ASP.NET中执行过程
我目前使用的解决方案如下所示。
我希望有人能补充一条评论,解释为什么这个问题被否决了,和/或提出一个更好的提问方式!我只能假设至少有人看到了这个问题,并说"多么愚蠢,ASP.NET代码就是.NET代码"。
试试这个:
using System.Web.Hosting;
// ...
if (HostingEnvironment.IsHosted)
{
// You are in ASP.NET
}
else
{
// You are in a standalone application
}
为我工作!
有关详细信息,请参阅HostingEnvironment.IsHosted。。。
我认为您真正想做的是重新思考您的设计。更好的方法是使用Factory类,该类根据应用程序的启动方式生成所需类的不同版本(旨在实现接口,以便可以互换使用)。这将本地化代码,以便在一个地方检测基于web和非基于web的使用,而不是将其分散在代码中。
public interface IDoFunctions
{
void DoSomething();
}
public static class FunctionFactory
{
public static IDoFunctions GetFunctionInterface()
{
if (HttpContext.Current != null)
{
return new WebFunctionInterface();
}
else
{
return new NonWebFunctionInterface();
}
}
}
public IDoFunctions WebFunctionInterface
{
public void DoSomething()
{
... do something the web way ...
}
}
public IDoFunctions NonWebFunctionInterface
{
public void DoSomething()
{
... do something the non-web way ...
}
}
using System.Diagnostics;
if (Process.GetCurrentProcess().ProcessName == "w3wp")
//ASP.NET
这是我对这个问题的回答。
首先,确保您的项目引用System.Web,并且您的代码文件是"使用System.Web;"。
public class SomeClass {
public bool RunningUnderAspNet { get; private set; }
public SomeClass()
//
// constructor
//
{
try {
RunningUnderAspNet = null != HttpContext.Current;
}
catch {
RunningUnderAspNet = false;
}
}
}
If HttpContext Is Nothing OrElse HttpContext.Current Is Nothing Then
'Not hosted by web server'
End If