Экспорт (0) Печать
Развернуть все

Использование AppCmd.exe для настройки IIS при запуске

Обновлено: Ноябрь 2013 г.

Средство командной строки AppCmd.exe можно использовать для управления параметрами IIS при запуске в Windows Azure.

AppCmd.exe обеспечивает удобный и быстрый доступ через командную строку к параметрам конфигурации, которые можно использовать в задачах запуска на Windows Azure. С помощью AppCmd.exe можно добавить, изменить и удалить параметры для приложений и сайтов. Дополнительные сведения о средстве AppCmd.exe см. в разделе AppCmd.exe библиотеки Microsoft Technet.

Чтобы использовать AppCmd.exe при запуске, добавьте соответствующие команды AppCmd.exe в задачу запуска.

Однако несколько сочетающихся факторов могут усложнить использование AppCmd.exe в задачах запуска.

  • Задачи запуска между перезагрузками могут быть запущены по несколько раз. Например, это может произойти при перезапуске роли.

  • Некоторые действия AppCmd.exe могут вызывать ошибки, если будут выполнены несколько раз. Попытка дважды добавить раздел в Web.config приведет к ошибке.

  • Задачи запуска завершаются ошибкой, если они возвращают ненулевой код завершения или errorlevel. Это может произойти, если AppCmd.exe вызовет ошибку.

Исходя из сказанного, целесообразно проверять errorlevel после выполнения AppCmd.exe. Например, после попытки добавления раздела в Web.config задача запуска может проверить, имеет ли errorlevel значение 183. Уровень errorlevel, равный 183, означает ошибку при попытке повторного добавления раздела Web.config. Поскольку раздел Web.config уже был добавлен в ходе предыдущего выполнения задачи запуска, задача должна выполняться дальше. Любая другая ошибка, например errorlevel 5 («доступ запрещен»), должна быть внесена в журнал, а задача запуска должна завершиться с кодом ошибки errorlevel. errorlevel 5 может означать, что атрибут executionContext задачи запуска должен иметь значение elevated вместо limited. Значения Errorlevel, которые возвращает AppCmd.exe, перечислены в файле winerror.h, а также в статье MSDN System Error Codes.

Пример

Этот пример добавляет в файл web.config раздел сжатия и запись сжатия для JSON, при этом осуществляется обработка ошибок и ведение журнала.

Ниже показаны соответствующие разделы файла ServiceDefinition.csdef, в том числе установка атрибута executionContext в значение elevated, чтобы дать AppCmd.exe достаточные разрешения для изменения параметров в файле web.config.

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

Пакетный файл Startup.cmd использует AppCmd.exe для добавления в файл web.config раздела сжатия и записи сжатия для JSON. Ожидаемый код errorlevel 183 приравнивается к нулю с помощью программы командной строки VERIFY.EXE. Непредвиденные errorlevels заносятся в 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