Решение проблем настроек web-сервера при публикации web-приложений

При публикации веб-приложения из Visual Studio разработчик может столкнуться с некоторыми проблемами, и не всегда текст ошибки может помочь избавиться от проблем и правильно настроить сервер.
Ниже я опишу наиболее распространенные из них.
Надеюсь, что данная статья поможет сэкономить время, большое количество которого я потратил при изучении проблем.

Давайте попробуем развернуть приложение на чистый сервер Windows 2008 R2, на котором установлена роль «Web Server (IIS)».

1. Для этого в Visual Studio (у меня Visual Studio 2012 Professional) кликаем правой мышкой на проекте и выбираем пункт меню «Publish...»
image

Откроется окно мастера публикации, в котором нужно создать профиль
image

Вводим имя профиля (я назвал профиль также, как называется мой веб-сервер — «app10») и нажимаем кнопку «ОК».
Затем заполняем поля ввода и нажимаем кнопку «Validate Connection».
image

И тут начинается самое интересное.

2. Валидация завершилась с ошибкой.
Для того, чтобы посмотреть текст ошибки, нужно щелкнуть на гиперссылке «Failed (click for details)»


3. Первая ошибка:
Could not connect to the destination computer ("app10"). On the remote computer, make sure that Web Deploy is installed and that the required process ("The Web Management Service") is started.)

Студия не получила ответа от сервера.
Необходимо проверить настройки веб-сервера (в моем случае он имеет доменное имя «app10»), для чего необходимо зайти в Server Manager (у меня на сервере установлена англоязычная версия Windows 2008 R2, поэтому я буду писать английский наименования пунктов меню и заголовков окон).

4. Откройте диспетчер служб IIS и выберите узел с именем машины:
image
Я скрыл имя пользователя на скриншоте.

5. В разделе «Management» нужно проверить наличие пунктов «IIS Manager Permissions», «IIS Manager Users» и «Management Service».
У меня их нет, поэтому нужно установить.
Для этого щелкните правой мышкой на пункт «Web Server (IIS)» в левой части окна «Server Manager» и выберите пункт «Add Role Services».
Откроется окно выбора роли.
В разделе «Management Tools» отметьте пункт «Management Service» и нажмите кнопку «Next».
image

В следующем окне мастера добавления роли нажмите кнопку «Install».
image

Необходимо дождаться окончания процесса добавления роли и убедиться, что все прошло успешно:
image

Закрываем окно добавления роли и опять переходим к разделу «Management» (см. пункт 5).
Необходимые нам пункты появились.
image

6. Необходимо проверить, что Брендмауэр Windows не мешает установлению соединения.
Для этого откройте оснастку «Windows Firewall with Advanced Security», которая находится в меню «Пуск» — «Administrative Tools».
Необходимо убедиться, что входящие соединения на порт 8172 разрешены.
(У меня брендмауэр вообще отключен).

7. Необходимо убедиться, что Web Management Service слушает порт 8172.
Для этого откройте в настройках сервера дважды щелкните мышкой по пункту «Management Service»
image

В открывшемся окне проверьте, что указан порт 8172, а также разрешите удаленные подключения, установив галочку «Enable remote connection».
Если не поставить эту галочку, то в мастере публикации в Visual Studio будет возникать ошибка:
Could not connect to the remote computer ("app10") using the specified process ("The Web Management Service") because the server did not respond. Make sure that the process ("The Web Management Service") is started on the destination computer. The remote server returned an error: (403) Forbidden.

Теперь нажмите кнопку «Apply» с зеленой галочкой в правой части окна надстроек.
После применения настроек нажмите там же кнопку «Start», что приведет к запуску службы.

8. Переключаемся в Visual Studio и снова нажимаем кнопку «Validate Connection» в мастере публикации.
У меня открылась ошибка сертификата, но ее можно просто игнорировать и нажать кнопку «Accept», предварительно поставив галочку «Save this certificate for future sessions of Visual Studio».

9. После этого у меня возникла ошибка 404:
Could not connect to the remote computer ("app10"). On the destination computer, make sure that Web Deploy is installed and that the required process ("The Web Management Service") is started. The remote server returned an error: (404) Not Found.

Необходимо убедиться, что установлен инструмент «Microsoft Web Deploy 2.0».
Для этого пройдите в «Пуск» — «Control Panel» — «Programs and Features» и проверьте наличие установленного продукта «Microsoft Web Deploy 2.0».
Если его нет, то скачайте его отсюда и установите на сервере.
Во время установки нужно выбрать тип установки «Custom» и выбрать для установки все пункты, предлагаемые инсталлятором:
image

Выполните установку.

После чего обновите окно «Programs and Features» и он у вас появится.
image

10. После установки «Microsoft Web Deploy 2.0» необходимо перезапустить службу «Web Management Service».
Теперь нажимаем кнопку «Validate Connection» в мастере публикации в Visual Studio и ВУАЛЯ!!!
Проверка успешно пройдена.
image

Нажимаем кнопку «Next» дважды и публикуем приложение на веб-сервер, нажав кнопку «Publish».

В завершение данной статьи хочу сказать, что наиболее информативные сообщения при возникновении ошибок во время публикации веб-приложения можно найти в файле логов IIS, который по умолчанию находится по следующему пути:
%SystemDrive%\Inetpub\logs\WMSvc
Только помните, что как и в случае с другими журналами IIS, данные не записываются в журнал сразу, так что вам, возможно, придется подождать пару минут, чтобы увидеть последние сообщения, или перезапустить службы веб-управления, чтобы сбросить данные журнала в лог-файл.

Удачи!

UPDATE 03.08.2015

Если во время проверки соединения с сервером (при нажатии на кнопку «Validate Connection») возникает ошибка:
Could not complete an operation with the specified provider ("contentPath") when connecting using the Web Management Service.


необходимо в диспетчере служб IIS выбрать узел с именем машины и дважды кликнуть левой клавишей мыши на пункте «Management Service Delegation»:


Бывает так, что пункт 'Management Service Delegation' отсутствует
Для устранения данной проблемы необходимо еще раз запустить инсталлер WebDeploy, выбрать пункт «Change» и доустановить компоненты.
Затем перезапускаем оснастку управления сервером и данный пункт появится.

В открывшемся окне необходимо добавить новое правило, нажав в правой верхней части на ссылку «Add Rule...» и выбрав пункт «Deploy Applications with Content» и нажав кнопку «ОК»:

В открывшемся окне необходимо указать пользователя, учетные данные которого вы используете для публикации из Visual Studio:

А также в выпадающем меню Providers необходимо дополнительно выбрать пункты «createApp» и «setAcl»:

После нажатия кнопки «ОК» откроется окно добавления пользователя.
Здесь в поле «Name» можно поставить * и нажать кнопку ОК:


После выполнения данных действий, окно правил «Management Service Delegation» будет иметь следующий вид:


И описанная ошибка исчезнет.

UPDATE 19.01.2017

Если во время проверки соединения с сервером (при нажатии на кнопку «Validate Connection») возникает ошибка:
Could not connect to the remote computer ("serverName") using the specified process ("Web Management Service") because the server did not respond. Make sure that the process ("Web Management Service") is started on the remote computer...

а в конце текста ошибки написано «The remote server returned an error: (550)».

Это говорит о том, что вы опечатались в параметре «Site name» в окне настроек публикации.
Проверьте имя сайта и сравните его с тем, куда публикуете своё приложение.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 13

    0
    А как у Web deploy с безопасностью? Соединение шифруется?
    И как быть, если на машине разработчика и на боевом сервере параметры web.config различаются?
      0
      Можно использовать SSL-сертификат для шифрования соединения:
      image

      На машине разработчика следует работать в конфигурации «Debug», а деплоить на сервер уже в конфигурации «Release»:
      image

      При этом в проекте существует 2 сущности файла web.config, которые собираются в итоговый web.config, который используется при работе с виртуального веб-сервера на машине разработчика или деплоится на сервер, в зависимости от выбранной конфигурации:
      image
        0
        Большое спасибо! Вы пролили мне свет на деплой (web.release.config)! 10 лет в .NET а про правильный workflow не знал! По старинке ручками по защищенному ftp-каналу и руками правил веб.конфиг.
        В мире Rails правильный workflow прививают с пеленок, жаль что в .NET не так.

        P.S. А как сделать, чтобы определенная директория на сервере при деплое никогда не заменялась (в моем случае та куда пользовательские изображения складываются)
          0
          Всегда пожалуйста! :)

          Если директория создана на сервере вручную, то при деплое с ней ничего не произойдет вообще.
            0
            Кстати, сейчас глянул в своем проекте в VS2010 (webforms), у меня нет 2 разных веб.конфигов.
              0
              Беру свои слова назад. Добавил руками эти имена файлов — встало как и у Вас внутри Web.Config :)
                0
                Хорошо, что разобрались :)
                  +1
                  Эти имена файлов не надо добавлять руками. Когда ты создашь конфигурацию в менеджере конфигураций, нужно после этого кликнуть правой кнопкой по web.config и выбрать Add config transform из контекстного меню, это правильный способ.
                    0
                    На самом деле, под «добавил руками» я и понял ручное добавление посредством контекстного меню «Add config transform».
                    А Visual Studio 2012 автоматически создает оба файла при создании нового проекта веб-приложения, если уже существует больше 1 конфигурации.
                      0
                      Спасибо. А в файлы вставить только различающиеся параметры?
                      Те параметры которые будут в Web.Debug.config и Web.Release.config из Web.config нужно убрать?
                        0
                        Оригинальный конфиг должен содержать все значения, которые позволяют запускать сайт локально. Отдельные конфиги для каждого окружения должны трансформироваться через трансформацию веб конфига. Там можно менять атрибуты элементов, добавлять новые элементы, и т.д.
          0
          Еще есть такая особенность:
          если поставить сначала WebDeploy, а потом IIS Management Services (например через WebPlatform installer), то сервис так же не будет доступен. Приходится удалять WebDeploy и ставить заново — после этого все работает.
            0
            Это происходит потому, что при установке WebDeploy через Web Platform Installer автоматически ставятся и требуемые службы IIS.
            В случае установки IIS Management Service после WebDeploy — нужно установить службы Logging Tools и Management Service вручную.

          Only users with full accounts can post comments. Log in, please.