我的代码如何找到它是否在 IIS 中运行

本文关键字:IIS 运行 是否 代码 何找 我的 | 更新日期: 2023-09-27 18:31:32

我的 C# 代码可能在 IIS(当前为 7.5,但我希望不依赖于特定版本)或其他地方的 MVC3 应用程序中运行。

看起来知道代码在 IIS 下运行的一种方法是检查当前进程名称,但这种方法取决于对文件名字符串进行硬编码。

是否有一些编程方法来检测我的代码是否在 IIS 下运行,而不依赖于 IIS 版本?

我的代码如何找到它是否在 IIS 中运行

看看 HostingEnvironment 类,尤其是 IsHosted 方法。

这将告诉您是否托管在应用程序管理器中,该应用程序管理器将告诉您是否由 ASP.NET 托管。

严格来说,它不会告诉您您正在 IIS 下运行,但我认为这实际上可以更好地满足您的需求。

示例代码:

// Returns the file-system path for a given path.
public static string GetMappedPath(string path)
{
    if (HostingEnvironment.IsHosted)
    {
        if (!Path.IsPathRooted(path))
        {
            // We are about to call MapPath, so need to ensure that 
            // we do not pass an absolute path.
            // 
            // We use HostingEnvironment.MapPath, rather than 
            // Server.MapPath, to allow this method to be used
            // in application startup. Server.MapPath calls 
            // HostingEnvironment.MapPath internally.
            return HostingEnvironment.MapPath(path);
        }
        else {
            return path;
        }
    }
    else 
    {
        throw new ApplicationException (
                "I'm not in an ASP.NET hosted environment :-(");
    }
}

看看 ServiceController 类。服务名称仍将进行硬编码,但服务更改名称的可能性相对较低。

您还可以使用 netstat -ab 来查找端口 80 上运行的内容。