2011-05-03 10 views
25

Tengo un pequeño desafío con una máquina con Windows 2003 donde necesito ejecutar el agente de despliegue web en un puerto que no es 80. De forma predeterminada, MsDepSvc expondrá un punto final en http: // [servidor]/MsDeployAgentService que obviamente escucha implícitamente en el puerto 80.¿Se puede ejecutar el agente de despliegue web en un puerto que no sea 80 en IIS6?

El problema que tengo es que la máquina también está ejecutando el servidor Visual SVN que está utilizando el puerto 80 y como resultado, el servicio del agente de despliegue web se niega a iniciar. (Al menos esta es la única conclusión lógica que puedo extraer). Tengo una pequeña aplicación de administración de SVN en la misma máquina que me gustaría publicar sobre la implementación web, de ahí el enigma.

¿Es posible ejecutar el agente en otro puerto? Obviamente, si se tratara de IIS7 estaríamos en 8172 y todo estaría bien, pero desafortunadamente ese no es el caso aquí. ¿Alguna sugerencia?

Respuesta

60

Hay un par de maneras de hacer esto:

Opción 1: desinstalar y volver a instalar Especificación de un puerto diferente:

msiexec /I WebDeploy_x86_en-US.msi /passive ADDLOCAL=ALL LISTENURL=http://+:8172/MsDeployAgentService 

La línea de comandos instala el MsDeployAgentService y lo configura para escuchar en el puerto 8172 al igual que en IIS7.

Opción 2: Cambiar la configuración del servicio existente para escuchar el puerto 8172:

  1. Detener la msdepsvc (net stop msdepsvc)

  2. Editar el siguiente valor del registro:

    HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters\ListenUrl 
    

    Se verá algo así como:

    http://+:80/MsDeployAgentService 
    

    Cambiar a:

    http://+:8172/MsDeployAgentService 
    
  3. oyentes HTTP Consulta:

    httpcfg query urlacl 
    

    Tu debería ver la siguiente entrada que aparece en los resultados:

    URL : http://+:80/MsDeployAgentService/ 
    ACL : D:(A;;GX;;;NS) 
    
  4. Modificar oyente:

    httpcfg delete urlacl /u http://+:80/MsDeployAgentService/ 
    

    Esto debe responder con: HttpDeleteServiceConfiguration completed with 0.

    httpcfg set urlacl /u http://+:8172/MsDeployAgentService/ /a D:(A;;GX;;;NS) 
    

    Esto debe responder con: HttpSetServiceConfiguration completed with 0.

    La ACL se especifica en el interruptor /a debe coincidir con la ACL reporta el comando httpcfg query urlacl

  5. Reinicie msdepsvc (net start msdepsvc).

  6. Puede confirmar que el servicio está escuchando en el puerto 8172 haciendo:

    netstat -an 
    

    Debería ver lo siguiente:

    TCP 0.0.0.0:8172   0.0.0.0:0    LISTENING 
    

Advertencia:

Intentaré esto en una máquina que no sea de producción primero para garantizar e esto funciona como esperabas

+1

de Epic no Kev - si esto era eBay Estaría "AAAA ++++" que ing fo Showa – Doug

+5

acabo de encontrar esta respuesta durante la búsqueda de la misma cuestión, pero que afecta a una caja de Windows 7, y el proceso trabajado para yo, con el ligero cambio de usar el comando 'netsh' en su lugar. Ref: http://msdn.microsoft.com/en-us/library/ms733768.aspx –

+0

Estaba recibiendo los siguientes errores y cambiar el puerto funcionó para mí. "Reintentando la sincronización porque se produjo un error de socket (10054). Volviendo a intentar la operación 'Serialización' en el objeto sitemanifest (sourcePath)." Lado del servidor que contiene el registro de eventos, "System.Net.HttpListenerException: se intentó una operación en una conexión de red inexistente". Gracias por la corrección. – Matt

24

Estos son los cambios que tenía que hacer para Windows 7, siguiendo la receta de Kev:

Paso 3: netsh http show urlacl

Paso 4: netsh http delete urlacl url=http://+:80/MSDEPLOYAGENTSERVICE/

netsh http add urlacl url=http://+:8172/MSDEPLOYAGENTSERVICE/ sddl=D:(A;;GX;;;NS)

+1

esto funcionó para mí al iniciar el servicio, pero los íconos de Administración aún faltan en IIS. ¿Alguna idea? – riaandelange

+0

Gracias funcionó para mí – Anil

7

Por lo que vale la pena, pegué los consejos sólidos de Kev en un script por lotes para una parada de compras en el cambio de números de puerto.

:: 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: [email protected] 
:: 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 HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters /v ListenUrl >NUL 
IF NOT "%ERRORLEVEL%"=="0" (
    ECHO %me%: ERROR - MsDepSvc ListenUrl registry key not found 
    REG.EXE QUERY HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters 
    ECHO %me%: exiting 
    EXIT /B 2 
) 

FOR /F "tokens=3" %%I IN ('REG.EXE QUERY HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters /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  &&GOTO :ERROR 
IF NOT DEFINED URLACL.Listen ECHO %me%: Failed to read the exising URLACL setting for Listen &&GOTO :ERROR 
IF NOT DEFINED URLACL.Delegate ECHO %me%: Failed to read the exising URLACL setting for Delegate &&GOTO :ERROR 
IF NOT DEFINED URLACL.SDDL  ECHO %me%: Failed to read the exising URLACL setting for SDDL  &&GOTO :ERROR 

ECHO %me%: updating MsDepSvc to listen on port %port% 
REG.EXE ADD HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters /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% 

Leer más:

+0

Acabo de tropezar con esto. Buena adaptación +1 :) – Kev

+0

Gracias - Me sale un error: "Error en la reserva de URL Url Error: 183" "No se puede crear un archivo cuando ese archivo ya existe" – niico

+0

Hola @niico, ¿qué número de puerto estás intentando? usar, ¿estás seguro de que es un puerto no utilizado y qué salida ves antes del mensaje de error? –

0

También vale la pena conocer la magia detrás de averiguar qué propiedad se almacena en el cual clave de registro - entrar Orca.exe - inestimable y una herramienta fácil de usar para leer/modificar la base de datos MSI (sin embargo, intente no modificar).

En primer lugar, tenemos que encontrar la propiedad en la tabla Property enter image description here

Una vez que la propiedad se encuentra, ir a la tabla de registro y encontrar donde se inserta. fu enter image description here

Cuestiones relacionadas