导出 (0) 打印
全部展开

使用 AppCmd.exe 在启动时配置 IIS

更新时间: 2013年11月

AppCmd.exe 命令行工具可用于在 Windows Azure 上管理启动时的 IIS 设置。

利用 AppCmd.exe,可以从命令行轻松访问配置设置,以便在 Windows Azure 上的启动任务中使用。通过使用 AppCmd.exe,可以为应用程序和网站添加、修改或删除网站设置。有关 AppCmd.exe 的更多信息,请参见 Microsoft Technet 上的 AppCmd.exe

若要在启动时使用 AppCmd.exe,请将适当的 AppCmd.exe 命令添加到启动任务。

但是,有几个因素会使得启动任务中对 AppCmd.exe 的使用变得复杂:

  • 启动任务会在重新启动之间运行多次。例如,此情况会在角色回收时出现。

  • 如果执行启动任务多次,则某些 AppCmd.exe 操作会生成错误。尝试将一个节添加到 Web.config 两次会生成错误。

  • 如果启动任务返回非零退出代码或 errorlevel,则表示启动任务失败。此情况在 AppCmd.exe 生成错误时会出现。

出于以下列出的原因,通常在执行 AppCmd.exe 后检查 errorlevel 是明智之举,这样做可确保 AppCmd.exe 按预期方式执行。例如,尝试将一个节添加到 Web.config 后,启动任务会检查 errorlevel 是否等于 183。errorlevel 183 是在尝试添加已有 Web.config 节时出现的预期错误。由于 Web.config 节应已在上一次执行启动任务时添加,因此启动任务应继续运行。应记录任何其他错误(如 errorlevel 5,即“访问被拒绝”)并且启动任务应退出,错误为 errorlevelerrorlevel 5 可以指示启动任务的 executionContext 属性可能需要 elevated 而非 limited。winerror.h 文件中列出了 AppCmd.exe 返回的 errorlevel,也可以在 MSDN 上的System Error Codes中进行查看。

示例

此示例将 JSON 的压缩节和压缩条目随同错误处理和日志记录一起添加到 Web.config 文件中。

此处显示了 ServiceDefinition.csdef 文件的相关节,包括将 executionContext 属性设置为 elevated 以便向 AppCmd.exe 授予足够的权限来更改 Web.config 文件中的设置:

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" />
    </Startup>

Startup.cmd 批处理文件使用 AppCmd.exe 将 JSON 的压缩节和压缩条目添加到 Web.config 文件。使用 VERIFY.EXE 命令行程序将预期的 errorlevel 值 183 设置为零。意外的 errorlevel 将记录到 StartupErrorLog.txt。

REM   *** Add a compression section to the Web.config file. ***
%windir%\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1

REM   ERRORLEVEL 183 occurs when trying to add a section that already exists. This error is expected if this
REM   batch file were executed twice. This can occur and must be accounted for in a Windows Azure startup
REM   task. To handle this situation, set the ERRORLEVEL to zero by using the Verify command. The Verify
REM   command will safely set the ERRORLEVEL to zero.
IF %ERRORLEVEL% EQU 183 DO VERIFY > NUL

REM   If the ERRORLEVEL is not zero at this point, some other error occurred.
IF %ERRORLEVEL% NEQ 0 (
   ECHO Error adding a compression section to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
   GOTO ErrorExit
)

REM   *** Add compression for json. ***
%windir%\system32\inetsrv\appcmd set config  -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1
IF %ERRORLEVEL% EQU 183 VERIFY > NUL
IF %ERRORLEVEL% NEQ 0 (
   ECHO Error adding the JSON compression type to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
   GOTO ErrorExit
)

REM   *** Exit batch file. ***
EXIT /b 0

REM   *** Log error and exit ***
:ErrorExit
REM   Report the date, time, and ERRORLEVEL of the error.
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
ECHO An error occurred during startup. ERRORLEVEL = %ERRORLEVEL% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT %ERRORLEVEL%

另请参阅

显示:
© 2014 Microsoft