#iis #configuration #webserver #webdeploy
#iis #конфигурация #веб-сервер #webdeploy
Вопрос:
У меня возникла небольшая проблема с компьютером с Windows 2003, где мне нужно запустить агент веб-развертывания на порту, который не равен 80. По умолчанию MsDepSvc предоставляет конечную точку по адресу http://[server]/MsDeployAgentService, которая, очевидно, неявно прослушивает порт 80.
Проблема, с которой я сталкиваюсь, заключается в том, что на компьютере также запущен Visual SVN Server, который использует порт 80, и в результате служба агента веб-развертывания отказывается запускаться. (По крайней мере, это единственный логический вывод, который я могу сделать.) На том же компьютере у меня есть небольшое приложение для управления SVN, которое я хотел бы опубликовать через web deploy, отсюда и головоломка.
Возможно ли запустить агент на другом порту? Очевидно, что если бы это был IIS7, мы были бы на 8172, и все было бы хорошо, но, к сожалению, здесь это не так. Есть предложения?
Ответ №1:
Есть несколько способов сделать это:
Вариант 1. Удалите и переустановите, указав другой порт:
msiexec /I WebDeploy_x86_en-US.msi /passive ADDLOCAL=ALL LISTENURL=http:// :8172/MsDeployAgentService
Командная строка устанавливает MsDeployAgentService и настраивает его для прослушивания на порту 8172 точно так же, как на IIS7.
Вариант 2. Повторно настройте существующую службу для прослушивания на порту 8172:
-
Остановите msdepsvc (
net stop msdepsvc
) -
Отредактируйте следующее значение реестра:
HKLMSYSTEMCurrentControlSetServicesMsDepSvcParametersListenUrl
Это будет выглядеть примерно так:
http:// :80/MsDeployAgentService
Измените на:
http:// :8172/MsDeployAgentService
-
Запрашивать HTTP-прослушиватели:
httpcfg query urlacl
В результатах вы должны увидеть следующую запись:
URL : http:// :80/MsDeployAgentService/ ACL : D:(A;;GX;;;NS)
-
Изменить прослушиватель:
httpcfg delete urlacl /u http:// :80/MsDeployAgentService/
Это должно отвечать:
HttpDeleteServiceConfiguration completed with 0.
httpcfg set urlacl /u http:// :8172/MsDeployAgentService/ /a D:(A;;GX;;;NS)
Это должно отвечать:
HttpSetServiceConfiguration completed with 0.
ACL, указанный в
/a
переключателе, должен соответствовать ACL, сообщенномуhttpcfg query urlacl
командой -
Перезапустите msdepsvc (
net start msdepsvc
). -
Вы можете подтвердить, что служба прослушивает порт 8172, выполнив:
netstat -an
Вы должны увидеть следующее:
TCP 0.0.0.0:8172 0.0.0.0:0 LISTENING
Предупреждение:
Сначала я бы попробовал это на нерабочем компьютере, чтобы убедиться, что это работает так, как вы ожидаете.
Комментарии:
1. Эпичный фу там Кев — если бы это был ebay, я бы «АААА » позвал тебя к севе
2. Я только что нашел этот ответ при поиске по той же проблеме, но затрагивающей окно Windows 7, и процесс сработал для меня, с небольшим изменением использования команды ‘netsh’ вместо этого. Ссылка: msdn.microsoft.com/en-us/library/ms733768.aspx
3. Я получал следующие ошибки, и изменение порта сработало для меня. «Повторяю попытку синхронизации, поскольку произошла ошибка сокета (10054). Повторяю операцию «Сериализации» на объекте sitemanifest (исходный путь).» На стороне сервера в журнале событий содержалось: «System.Net.HttpListenerException: была предпринята попытка выполнения операции при несуществующем сетевом соединении». Спасибо за исправление.
4. Просто продолжение ответа Kev: httpcfg распространяется как часть «32-разрядных средств поддержки Windows Server 2003 с пакетом обновления 2 ( microsoft.com/download/en /… )».
5. Я использую Windows Server 2016, я не могу найти «httpcfg.exe «.
Ответ №2:
Это изменения, которые я должен был сделать для Windows 7, следуя рецепту Kev:
Шаг 3: netsh http show urlacl
Шаг 4: netsh http delete urlacl url=http:// :80/MSDEPLOYAGENTSERVICE/
netsh http add urlacl url=http:// :8172/MSDEPLOYAGENTSERVICE/ sddl=D:(A;;GX;;;NS)
Комментарии:
1. это сработало при запуске службы, но значки управления по-прежнему отсутствуют в IIS. Есть идеи?
Ответ №3:
Как бы то ни было, я объединил убедительные советы Kev в пакетный скрипт для одноразовой покупки при изменении номеров портов.
:: Name: MsDepSvc.Port.cmd
:: Purpose: Modifies the TCP/IP port that the Web Deployment Agent Service
:: (MsDepSvc) listens on. Tested on Win7 Enterprise 32-bit.
:: Author: stevejansen_github@icloud.com
:: Revision: January 2013
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
:: variables
SET me=%~n0
SET url=
SET port=
IF NOT "%~1"=="" (
SET /A port=%~1
)
ECHO %me%: Web Deployment Agent Service (MsDepSvc) port change script
:: default argument values
IF "%port%"=="" (
SET /A port=8172
ECHO %me%: INFO - using default port value of 8172
)
SC.EXE query msdepsvc >NUL 2>NUL
IF NOT "%ERRORLEVEL%"=="0" (
ECHO %me%: ERROR - MsDepSvc not installed
ECHO %me%: exiting
EXIT /B 1
)
ECHO %me%: stopping MsDepSvc
NET STOP msdepsvc >NUL 2>NUL
:: check if the default port is set
REG.EXE QUERY HKLMSYSTEMCurrentControlSetServicesMsDepSvcParameters /v ListenUrl >NUL
IF NOT "%ERRORLEVEL%"=="0" (
ECHO %me%: ERROR - MsDepSvc ListenUrl registry key not found
REG.EXE QUERY HKLMSYSTEMCurrentControlSetServicesMsDepSvcParameters
ECHO %me%: exiting
EXIT /B 2
)
FOR /F "tokens=3" %%I IN ('REG.EXE QUERY HKLMSYSTEMCurrentControlSetServicesMsDepSvcParameters /v ListenUrl ^| FINDSTR ListenUrl') DO (
SET url=%%I
)
ECHO %me%: INFO - MsDepSvc current reservation is "%url%"
NETSH.EXE http show urlacl "%url%" >NUL
IF NOT "%ERRORLEVEL%"=="0" (
ECHO %me%: ERROR - reservation for "%url%" not found
EXIT /B 4
)
:: save the existing urlacl properties for User, Listen, Delegate, and SDDL
FOR /F "tokens=1,* delims=: " %%A IN ('NETSH.exe http show urlacl %url% ^| FINDSTR "User Listen Delegate SDDL"') DO (
SET URLACL.%%A=%%B
)
IF NOT DEFINED URLACL.User ECHO %me%: Failed to read the exising URLACL setting for User amp;amp;GOTO :ERROR
IF NOT DEFINED URLACL.Listen ECHO %me%: Failed to read the exising URLACL setting for Listen amp;amp;GOTO :ERROR
IF NOT DEFINED URLACL.Delegate ECHO %me%: Failed to read the exising URLACL setting for Delegate amp;amp;GOTO :ERROR
IF NOT DEFINED URLACL.SDDL ECHO %me%: Failed to read the exising URLACL setting for SDDL amp;amp;GOTO :ERROR
ECHO %me%: updating MsDepSvc to listen on port %port%
REG.EXE ADD HKLMSYSTEMCurrentControlSetServicesMsDepSvcParameters /v ListenUrl /t REG_SZ /f /d "http:// :%port%/MSDEPLOYAGENTSERVICE/"
ECHO %me%: deleting the existing reservation for MsDepSvc
NETSH.EXE http delete urlacl "%url%" || GOTO :ERROR
ECHO %me%: adding the port %port% reservation for MsDepSvc
NETSH.EXE http add urlacl url=http:// :%port%/MsDeployAgentService/ user="%URLACL.User%" listen="%URLACL.Listen%" delegate="%URLACL.Delegate%" SDDL="%URLACL.SDDL%" || GOTO :ERROR
ECHO %me%: starting MsDepSvc
NET START msdepsvc >NUL 2>NUL
ECHO %me%: process info for MsDepSvc
QUERY.EXE PROCESS MSDEPSVC.EXE
ECHO.
ECHO %me%: port bindings for MsDepSvc
NETSTAT.EXE -a -n -o | FINDSTR /R "TCP.*:%port%.*LISTENING Proto"
ECHO.
ECHO %me%: finished
:END
ENDLOCAL
ECHO ON
@EXIT /B 0
:ERROR
ECHO %me%: ERROR - exiting with errorlevel %ERRORLEVEL%
ECHO ON
@EXIT/B %ERRORLEVEL%
Читать дальше:
Комментарии:
1. Просто наткнулся на это. Хорошая адаптация 1 🙂
2. Спасибо — Я получаю сообщение об ошибке: «Ошибка при добавлении резервирования URL-адреса, ошибка: 183» «Не удается создать файл, когда этот файл уже существует»
3. Привет @niico, какой номер порта вы пытаетесь использовать, вы уверены, что это неиспользуемый порт, и какой вывод вы видите перед сообщением об ошибке?
4. Я отступлю, если позволите. Я просто хочу остановить его с помощью порта 80 — потому что он открыт на аппаратном брандмауэре — и использовать другой порт, который закрыт (большинство из них), поэтому он не открыт для всего мира, только для пользователей VPN. Мне все равно, на каком порту. Какие мысли?
5. (строка перед этой ошибкой была: добавление резервирования порта 1872 для MsDepSvc) — это чистая установка Web Deploy 3.5 на Windows Server 2012
Ответ №4:
Также стоит знать, как узнать, какое свойство хранится в каком разделе реестра — введите Orca.exe — бесценный и простой в использовании инструмент для чтения / изменения базы данных MSI (хотя старайтесь не изменять).
Сначала нам нужно найти свойство в таблице свойств
Как только свойство найдено, перейдите в таблицу реестра и найдите, куда оно вставлено.