проверить статус пула приложений iis7 с помощью csharp (доступ запрещен) - PullRequest
1 голос
/ 27 апреля 2010

Мне нужно отслеживать состояние приложения в пуле приложений IIS 7 с другого компьютера в том же домене. Мое приложение мониторинга должно быть в C # и работать как служба Windows.

На моем сервере я создаю пользователя с правами администратора и выполняю команду aspnet_regiis -ga machine \ username, которая успешно работала.

Моя проблема, когда я пытаюсь получить доступ к пулу приложений, я все еще получаю COMExcepttion "Доступ запрещен". Что я сделал не так или какой шаг я пропустил?

Я использовал код из http://patelshailesh.com/index.php/create-a-website-application-pool-programmatically-using-csharp в качестве примера.

        int status = 0;
        string ipAddress = "10.20.2.13";
        string username = "username";
        string password = "password";
        try
        {
            DirectoryEntry de = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools/MyAppPoolName", ipAddress), username, password);

            //the exception is thron here.
            status = (int)de.InvokeGet("AppPoolState");

            switch (status)
            {
                case 2:
                    //Runnig
                    break;
                case 4:
                    //Stopped
                    break;
                default:
                    break;
            }
        }
        catch (Exception ex)
        {

        }

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

Код, который вы нашли, похоже, для IIS6. Возможно, вам будет лучше использовать новый и поддерживаемый API управления IIS7. Вы можете начать с вызова ServerManager.OpenRemote , чтобы получить объект ServerManager .

0 голосов
/ 29 апреля 2010

Это работает очень хорошо на Windows 7 и Windows Server 2008 (к сожалению, не на XP и 2003 Server). Мне пришлось добавить роль службы управления в IIS через диспетчер сервера, чтобы включить удаленное соединение.

Вот краткий пример того, как получить состояние пула приложений.

public ObjectState State
    {
        get
        {
            ServerManager server = null;
            ObjectState result = ObjectState.Unknown;
            try
            {
                server = ServerManager.OpenRemote(address);
                result = server.ApplicationPools[name].State;
            }
            finally
            {
                if (server != null)
                    server.Dispose();
            }

            return result;
        }
    }

Благодаря Дрису.

0 голосов
/ 27 апреля 2010

Возможно, вам придется возиться с AuthenticationType , по умолчанию, начиная с 2.0, это Безопасный, но вам может потребоваться установить SSL. Кроме того, я видел сообщения об отказе в доступе от учетных записей с пометкой «пользователь должен изменить пароль при следующем входе в систему».

...