2013-05-15 3 views
2

Я пытаюсь запустить все пулы приложений на серверах IIS7. Я хочу показать их в сетке и разрешить пользователям запускать, останавливать или перерабатывать их. Это отлично работает в IIS6, используя DirectoryENtry, но это не работает для IIS7. У меня будет 4 или 5 серверов, которые мне нужно будет пройти и захватить все пулы приложений. Вот мой код:Получить пулы приложений с нескольких серверов IIS7

using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString)) 
{ 
    myConnection.Open(); 

    SqlCommand cmd = new SqlCommand("SELECT ServerIP FROM Servers WHERE AppPoolIIS7='Y' AND Domain='LAN'", myConnection); 

    SqlDataReader rdr = cmd.ExecuteReader(); 

    if (rdr.HasRows) 
    { 
     while (rdr.Read()) 
     { 
      string serverIP = rdr["ServerIP"].ToString(); 
      ServerManager sm = new ServerManager(serverIP); 
      ApplicationPoolCollection appPoolColl = sm.ApplicationPools; 

      foreach (ApplicationPool appPool in appPoolColl) 
      { 

      }     
     } 
    } 
    else 
    { 

    }   
} 

При пошаговом через код, мой первый сервер успешно извлечен из базы данных, но когда я пытаюсь передать ServerIP моего диспетчера сервера я получаю ошибку ниже.

Имя файла: \ \ 10.0.22.22 Ошибка: Не удается прочитать файл конфигурации

Почему добавление \ \ к мой IP?

EDIT: Я внесла некоторые изменения в код, и я получаю другую ошибку.

ServerManager sm = ServerManager.OpenRemote(serverIP); 

Здесь ошибка я получаю:

Retrieving the COM class factory for remote component with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} from machine failed due to the following error: 800706ba

+2

Извините, если вы уже видели этот [аналогичный вопрос] (http://stackoverflow.com/questions/6693567/comexception-during-authentication-when-managing-iis-remotely-using-microsoft-we), это не получил принятый ответ, но на всякий случай какие-либо предложения помогут вам. – Klors

+0

Какой пользователь это говорит? Пользователь, которым я запускаю приложение как? – Matt

+1

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

ответ

2

Проблема заключается в том, что использование ServerManager.OpenRemote метода DCOM внутри для подключения к удаленному серверу и порты по умолчанию с использованием по DCOM является блоком из окна брандмауэра. Поскольку DCOM с использованием TCP-порта 135 и динамического диапазона портов TCP 1024/65335 вам необходимо изменить настройку пакета IIS Admin COM + на удаленном компьютере, чтобы ограничить его конечную точку использованием только одного TCP-порта вместо динамического диапазона. Вы можете найти инструкцию here.

Редактировать

По умолчанию в ОС Windows 2008+ ahadmin pachage ключ HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{9fa5c497-f46d-447f-8011-05d03d7d7ddc} является read-only для всех пользователей, но TrustedInstaller вы должны сначала взять на себя ответственность ключа затем дать full control разрешение пользователю, который хочет изменить ahadmin пакет настройки. Помните, что после изменения свойств пакета верните настройки разрешения ключа в оригинал.

+0

Я прохожу через эти инструкции. Тем не менее, похоже, что он неактивен. Вероятно, групповая политика. – Matt

+0

@Matt Вы правы! Проверьте обновленный ответ. –

+0

Взятие права на ключ реестра отлично поработало. Большое вам спасибо за вашу помощь. – Matt

1

Да, вам нужно открыть брандмауэр, но вам не нужно устанавливать фиксированный порт для ahadmin. Вам нужно три правила в брандмауэре. Один для открытия порта 135 (tcp), один для% SystemRoot% \ System32 \ dllhost.exe с локальными портами, установленными в динамические порты RPC, и последний для% SystemRoot% \ System32 \ dllhost.exe с локальным портом, установленным в RPC Endpoint Mapper

Смежные вопросы