Exportar (0) Imprimir
Expandir todo

Usar AppCmd.exe para configurar IIS en el momento del inicio

Actualizado: noviembre de 2013

La herramienta de línea de comandos AppCmd.exe se puede utilizar para administrar la configuración de IIS en el inicio de Windows Azure.

AppCmd.exe proporciona un cómodo acceso desde la línea de comandos a los valores de configuración para su uso en tareas de inicio en Windows Azure. Con AppCmd.exe, se pueden agregar, modificar o quitar valores de configuración del sitio web para aplicaciones y sitios. Para obtener más información sobre AppCmd.exe, vea AppCmd.exe en Microsoft Technet.

Para utilizar AppCmd.exe en el inicio, agregue los comandos adecuados para AppCmd.exe a la tarea de inicio.

Sin embargo, el uso de AppCmd.exe en tareas de inicio se podría complicar en caso de que se combinaran determinados factores:

  • Las tareas de inicio pueden ejecutarse más de una vez entre se reinicios. Esto puede producirse si el rol se recicla, por ejemplo.

  • Algunas de las acciones de AppCmd.exe pueden generar errores si se realizan más de una vez. Si intenta agregar una sección a Web.config dos veces, podría producirse un error.

  • Las tareas de inicio producen un error si devuelven un código de salida o un errorlevel que no sea cero. Esto puede suceder si AppCmd.exe genera un error.

Por estas razones, es recomendable comprobar con frecuencia el errorlevel después de que se ejecute un AppCmd.exe con el fin de asegurarse de que AppCmd.exe se comportó como se esperaba. Por ejemplo, después de intentar agregar una sección a Web.config, la tarea de inicio pudo comprobar si el errorlevel es igual a 183. Un errorlevel de 183 es el error que se espera cuando se intenta agregar una sección Web.config que ya existe. Dado que la sección Web.config ya se habría agregado previamente a través de una ejecución anterior de la tarea de inicio, la tarea de inicio debe continuar. Cualquier otro error, por ejemplo un errorlevel de 5 que es “acceso denegado”, debe registrarse y la tarea de inicio debe salir con el errorlevel del error. Un errorlevel de 5 podría indicar que es necesario que el atributo executionContext para la tarea de inicio sea elevated en lugar de limited. Los niveles de error que devuelve AppCmd.exe aparecen en el archivo winerror.h y también se pueden ver en System Error Codes en MSDN.

Ejemplo

Este ejemplo agrega una sección de compresión y una entrada de compresión para JSON en el archivo Web.config, con tratamiento y registro de errores.

Las secciones relevantes del archivo ServiceDefinition.csdef se muestran aquí, lo cual incluye establecer el atributo executionContext en elevated para conceder a AppCmd.exe los permisos suficientes para cambiar los valores en el archivo Web.config:

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

El archivo por lotes Startup.cmd utiliza el archivo AppCmd.exe para agregar una sección de compresión y una entrada de compresión para JSON en el archivo Web.config. El errorlevel esperado de 183 se establece en cero mediante el programa de línea de comandos VERIFY.EXE. Los niveles de error inesperados se registran en 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%

Vea también

Mostrar:
© 2014 Microsoft