Как мой код может найти, если он работает в IIS?

Мой код С# может запускаться внутри приложения MVC3 в IIS (в настоящее время 7,5, но я не хочу зависеть от конкретной версии) или в другом месте.

Похоже, что один из способов узнать, что код работает под IIS, чтобы проверить имя текущего процесса, но этот подход зависит от жесткой кодировки строки имени файла.

Существует ли какой-то программный способ обнаружения моего кода в IIS, не зависящем от версии IIS?

Ответы

Ответ 1

Посмотрите на HostingEnvironment класс, особенно метод IsHosted.

Это скажет вам, размещен ли в ApplicationManager, который расскажет вам, если вы размещаете 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 :-(");
    }
}

Ответ 2

Посмотрите на класс ServiceController. Имя службы по-прежнему будет жестко запрограммировано, но шансы на изменение имени службы относительно низки.

Вы также можете использовать netstat -ab, чтобы узнать, что работает на порту 80.