Как перезапустить пул приложений в IIS 6 через ASP.Net и C #? - PullRequest
1 голос
/ 06 февраля 2012

У меня есть сервер IIS 6, и мне нужно перезапустить определенный пул приложений. Мне нужно спроектировать веб-страницу ASP.NET с использованием C #, который выполняет эту задачу.

Как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 06 февраля 2012

просто создайте отдельную веб-страницу / веб-приложение и установите его на веб-сервере, предназначенном для другого пула приложений (не уверен, как это будет работать, если он будет работать на той же странице вашего приложения и связан с тем же пулом приложений, который вы хотите перезапустить ).

затем следуйте инструкциям здесь: https://stackoverflow.com/a/496357/559144

0 голосов
/ 06 февраля 2012

Я использую этот метод.

HttpRuntime.UnloadAppDomain ()

HttpRuntime.UnloadAppDomain Method (System.Web)

0 голосов
/ 06 февраля 2012

Достаточно следующего (я не могу засвидетельствовать это, поскольку код не использовался в течение достаточно долгого времени):

using System;
using System.Collections.Generic;
using System.Web;
using System.DirectoryServices;

public static class ApplicationPoolRecycle
{
    public static void RecycleCurrentApplicationPool()
    {
        string appPoolId = GetCurrentApplicationPoolId();
        RecycleApplicationPool(appPoolId);
    }
    private static string GetCurrentApplicationPoolId()
    {
        string virtualDirPath = AppDomain.CurrentDomain.FriendlyName;
        virtualDirPath = virtualDirPath.Substring(4);
        int index = virtualDirPath.Length + 1;
        index = virtualDirPath.LastIndexOf("-", index - 1, index - 1);
        index = virtualDirPath.LastIndexOf("-", index - 1, index - 1);
        virtualDirPath = "IIS://localhost/" + virtualDirPath.Remove(index);
        DirectoryEntry virtualDirEntry = new DirectoryEntry(virtualDirPath);
        return virtualDirEntry.Properties["AppPoolId"].Value.ToString();
    }
    private static void RecycleApplicationPool(string appPoolId)
    {
        string appPoolPath = "IIS://localhost/W3SVC/AppPools/" + appPoolId;
        DirectoryEntry appPoolEntry = new DirectoryEntry(appPoolPath);
        appPoolEntry.Invoke("Recycle");
    }
}
0 голосов
/ 06 февраля 2012

Вы можете использовать класс DirectoryEntry для программного перезапуска пула приложений по его имени:

var path = "IIS://localhost/W3SVC/AppPools/MyAppPool";
var appPool = new DirectoryEntry(path);
appPool.Invoke("Recycle");
...