【问题标题】:Can the web deploy agent run on a port other than 80 on IIS6?Web 部署代理可以在 IIS6 上的 80 以外的端口上运行吗?
【发布时间】:2011-08-17 13:35:07
【问题描述】:

我在使用 Windows 2003 机器时遇到了一些挑战,我需要在不是 80 的端口上运行 Web 部署代理。默认情况下,MsDepSvc 将在 http://[server ]/MsDeployAgentService 显然隐式侦听端口 80。

我遇到的问题是机器也在运行 Visual SVN 服务器,它使用端口 80,因此 Web 部署代理服务拒绝启动。 (至少这是我能得出的唯一合乎逻辑的结论。)我在同一台机器上有一个小型 SVN 管理应用程序,我想通过 Web 部署发布它,因此这是个难题。

是否可以在另一个端口上运行代理?显然,如果这是 IIS7,我们将使用 8172,一切都会好起来的,但不幸的是,这里并非如此。有什么建议吗?

【问题讨论】:

    标签: iis configuration webserver webdeploy


    【解决方案1】:

    有几种方法可以做到这一点:

    选项 1:卸载并重新安装指定不同的端口:

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

    命令行安装 MsDeployAgentService 并将其配置为侦听端口 8172,就像在 IIS7 上一样。

    选项 2:重新配置现有服务以侦听端口 8172:

    1. 停止 msdepsvc (net stop msdepsvc)

    2. 编辑以下注册表值:

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

      它看起来像:

      http://+:80/MsDeployAgentService
      

      改为:

      http://+:8172/MsDeployAgentService
      
    3. 查询 HTTP 监听器:

      httpcfg query urlacl
      

      您应该会在结果中看到以下条目:

      URL : http://+:80/MsDeployAgentService/
      ACL : D:(A;;GX;;;NS)
      
    4. 修改监听器:

      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.

      /a 开关中指定的 ACL 应与 httpcfg query urlacl 命令报告的 ACL 匹配

    5. 重新启动 msdepsvc (net start msdepsvc)。

    6. 您可以通过以下方式确认服务正在侦听端口 8172:

      netstat -an
      

      您应该看到以下内容:

      TCP    0.0.0.0:8172           0.0.0.0:0              LISTENING
      

    警告:

    我会先在非生产机器上尝试这个,以确保它按您的预期工作。

    【讨论】:

    • Epic fu there Kev - 如果这是 ebay,我会是“AAAA++++”让你看秀
    • 我刚刚在搜索相同问题时找到了这个答案,但影响了 Windows 7 机器,并且该过程对我有用,只是稍微改变了使用“netsh”命令。参考:msdn.microsoft.com/en-us/library/ms733768.aspx
    • 我收到以下错误,更改端口对我有用。 “正在重试同步,因为发生了套接字错误 (10054)。正在重试对象站点清单 (sourcePath) 上的“序列化”操作。”服务器端事件日志包含“System.Net.HttpListenerException:尝试对不存在的网络连接进行操作。”感谢您的修复。
    • 只是对 Kev 回答的跟进:httpcfg 作为“Windows Server 2003 Service Pack 2 32 位支持工具 (microsoft.com/download/en/…)”的一部分分发。
    • 选项 1 对我来说失败:我无法重新安装,因为 WMSvc(Web 管理)已经使用了 8172。我无法理解——MsDepSvc 需要 WMSvc 才能工作,但两者都使用相同的端口,这在纸上没有意义,而在实践中,对我来说,证明是行不通的!它对任何人都有什么作用??
    【解决方案2】:

    这些是我必须按照 Kev 的配方为 Windows 7 做的更改:

    第 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)

    【讨论】:

    • 这对我启动服务很有用,但 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 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%
    

    阅读更多:

    【讨论】:

    • 刚刚碰到这个。很好的改编+1 :)
    • 谢谢 - 我收到一个错误:“网址保留添加失败,错误:183”“当该文件已存在时无法创建文件”
    • 嗨@niico,您尝试使用什么端口号,您确定它是未使用的端口,您在错误消息之前看到什么输出?
    • 如果可以的话,我会退后一步。我只想使用端口 80 阻止它 - 因为它在硬件防火墙上打开 - 并使用另一个关闭的端口(大多数是关闭的),因此它不对世界开放,只对 VPN 用户开放。我不介意哪个端口。想法?
    • (该错误之前的行是:为 MsDepSvc 添加端口 1872 保留) - 这是在 Windows Server 2012 上全新安装的 Web Deploy 3.5
    【解决方案4】:

    还值得了解找出哪些属性存储在哪个注册表项中的魔力 - 输入 Orca.exe - 用于读取/修改 MSI 数据库的宝贵且易于使用的工具(尽量不要修改)。

    首先,我们需要在属性表中找到属性

    找到该属性后,转到注册表并找到它的插入位置。

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 2023-03-28
      • 1970-01-01
      • 2019-09-15
      • 2011-03-09
      • 2013-01-27
      • 2011-02-19
      • 2023-02-25
      • 1970-01-01
      相关资源
      最近更新 更多