C# 我的代码如何找到它';它在IIS中运行吗?
我的C#代码可能在IIS(目前为7.5,但我不希望依赖于特定版本)或其他版本下的MVC3应用程序中运行 似乎有一种方法可以知道代码在IIS下运行,但这种方法取决于硬编码文件名字符串 是否有一些编程方法可以检测我的代码是否在IIS下运行,而不取决于IIS版本?请查看该类。服务名称仍将硬编码,但更改名称的可能性相对较低 您还可以使用C# 我的代码如何找到它';它在IIS中运行吗?,c#,asp.net-mvc,asp.net-mvc-3,iis,C#,Asp.net Mvc,Asp.net Mvc 3,Iis,我的C#代码可能在IIS(目前为7.5,但我不希望依赖于特定版本)或其他版本下的MVC3应用程序中运行 似乎有一种方法可以知道代码在IIS下运行,但这种方法取决于硬编码文件名字符串 是否有一些编程方法可以检测我的代码是否在IIS下运行,而不取决于IIS版本?请查看该类。服务名称仍将硬编码,但更改名称的可能性相对较低 您还可以使用netstat-ab查找端口80上运行的是什么。查看该类,尤其是方法 这将告诉您是否由ASP.NET托管,这将告诉您是否由ASP.NET托管 严格来说,它不会告诉你你是在
netstat-ab
查找端口80上运行的是什么。查看该类,尤其是方法
这将告诉您是否由ASP.NET托管,这将告诉您是否由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 :-(");
}
}
仅仅因为IIS在端口80上运行并不意味着他的应用程序被托管在IIS上。反之亦然——IIS可以在任何其他端口(如8080)上运行。这就是为什么建议使用ServiceController类。ServiceController所能做的只是告诉您IIS服务是否正在运行,而不是当前代码是否正在该IIS中运行。