IIS: Como evitar liberación de recursos del Worker Process

IIS, incorpora por defecto la liberación de recursos del sistema cuando el sitio está inactivo durante un tiempo. Esto presenta una desventaja en determinadas ocaciones, la próxima vez que se acceda al sitio, el usuario deberá esperar a que el proceso de trabajo comience nuevamente y causa problemas de rendimiento de la aplicación web o ejecución de procesos internos.

Para cambiar este comportamiento hay que hacerlo desde el AppPool (grupo de aplicaciones), concretamente en «Configuración avanzada…» y cambiar algunos valores de la ventana que aparecezca.

IIS-appPool

Los pasos para cambiar y configurar los atributos son:

  1. Ejecutar IIS y situarnos AppPools (Grupos de aplicaciones).
  2. Seleccionar el AppPool del sitio y pulsar opción Configuración avanzada.
  3. Se abrirá una ventana con una lista de atributos para configurar .
  4. En sección Modelo de proceso poner Idle Timeout / Tiempo inactividad = 0
  5. En sección Reciclaje poner Regular Time Interval / Intervalo Tiempo Regular = 0
  6. Verificar la configuración de Specific Times / Horas específicas  para asegurarse que no hay valores allí.
  7. Pulsar en Aceptar para guardar cambios y cerrar pantalla ventana.

Aqui vemos una captura de pantalla donde encontrar los atributos y los valores por defecto que IIS asigna en cada caso:

IIS-idletimeout

En función del Idioma las opciones estarán en ingles o castellano y en orden diferentes.

Espero que sea de utilidad.

 

IIS: Internal Server Error 500 como solucionarlo

iis7-banner

Cuando recibimos un error 5xx, cualquier servidor web, nos indica que se ha producido un error que puede estar causado por diferentes motivos como:

  • Un error de permisos de usuarios
  • Un error de lectura/escritura en disco
  • Un error de aplicacion o base de datos
  • Un error de timeout, gateway, proxy
  • Un error de limite de memoria
  • Un error de sobrecarga de peticiones,
  • etc.

Los errores 5xx se agrupan dentro de estas categorias:

  • 500 Internal Server Error
  • 501 Not Implemented
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout
  • 505 HTTP Version Not Supported

Una forma rápida de saber que esta pasando en nuestro servidor es mirar logs del propio IIS y logs de Windows en el Visor de Eventos.

Otra forma, es saber que IIS, justo después del error, indica cual es el origen del problema y si tenemos activada la página de errores, incluso nos dara una solución o un enlace para saber como solucionarlo.

Como una imagen, vale más que 1000 palabras, veamoslo aqui:

IIS, tiene un subgrupo de errores HTTP detallado para ayudarnos a solucionarlo:

500 – Error interno del servidor

  • 500.0 – Error de algún módulo o ISAPI
  • 500.11 – La aplicación se está cerrando en el servidor web
  • 500.12 – La aplicación está ocupada reiniciando en el servidor Web
  • 500.13 – El servidor web está demasiado ocupado
  • 500.15 – No se permiten solicitudes directas de Global.asax
  • 500.19 – Datos de configuración no válidos
  • 500.21 – Módulo no reconocido
  • 500.22 – Config. httpModules no funciona en modo canalización administrado
  • 500.23 – No se aplica controladores HTTP  en modo canalización administrado
  • 500.24 – Suplantación ASP.NET no funciona en modo de canalización administrado
  • 500.50 – Error de ejecución de regla de entrada o configuración
  • 500.51 – Error de ejecución de regla global o configuración global
  • 500.52 – Error de ejecución de una regla de salida. RQ_SEND_RESPONSE
  • 500.53 – Error de ejecución de regla de salida. RQ_RELEASE_REQUEST_STATE.
  • 500.100: Error ASP interno

501 – Valores de encabezado especifican una configuración no implementada

  • 501.0 – No implementado. El explorador del cliente envía un verbo HTTP Trace y el servidor no está configurado para procesar el verbo HTTP Trace.

502 – Servidor web recibió una respuesta no válida actuando como gateway o proxy

  • 502.1 – Tiempo de espera de aplicación CGI
  • 502.2 – Puerta de enlace incorrecta: salida prematura
  • 502.3 – Puerta de enlace incorrecta: Error de conexión de reenviador (ARR)
  • 502.4 – Puerta de enlace incorrecta: no hay ningún servidor (ARR)
  • 502.5 – Error de WebSocket (ARR)
  • 502.6 – Error de solicitud de reenvío (ARR)
  • 502.7 – Ejecutar la solicitud falla (ARR)

503: Servicio no disponible

  • 503.0 – Grupo de aplicaciones disponible
  • 503.2 – Superado el límite de solicitudes simultáneas
  • 503.3 – ASP.NET cola llena

Recordar: IIS en la página web del error nos muestra información detallada y un link para buscar la solución a nuestro problema.

Que ocurre si no veo el error detallado

Es posible que veamos un error general sin detallar que esta pasando.

IIS Default 500 error

En este caso, hay que configurar IIS de forma global (cosa que no siempre es posible) o se puede indicar en web.config de nuestra aplicación ASP.NET para indicar expresamente que muestre los errores especificos escribiendo esto en nuestro web.config dentro del apartado correspondiente.

Poner esto para errores detallados:

<system.webServer>
 <httpErrors existingResponse="PassThrough" errorMode="Detailed"/>
 <asp scriptErrorSentToBrowser="true"/> 
</system.webServer>

Poner esto temporalmente para depurar:

 <system.web> 
   <customErrors mode="Off"/>
   <compilation debug="true"/>
 </system.web>

Referencia Protocolo HTTP

Link: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10

 

IIS: Proteger connectionstring y passwords en web.config

iis7-banner

Si estamos publicando una aplicación en servidores de producción como IIS, debemos proteger dentro de nuestro web.config, la cadena de conexión de BBDD para no mostrar usuario y password, para ello, hay varias formas de hacerlo:

1) Usar seguridad integrada “SSPI” y evitar user/password en cadena de conexión:

<configuration>
 <connectionStrings>
 <add name=”SqlServices” connectionString=”Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;” />
 </connectionStrings>
 </configuration

2) Encriptar la cadena de conexión(ver enlace codeproject Tips):

Framework: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
ocultar: ASPNET_REGIIS -pef “connectionStrings” “c:\appweb\EncryptWebConfig”
mostrar: ASPNET_REGIIS -pdf “connectionStrings” “c:\appweb\EncryptWebConfig”

 <CipherData>
 <CipherValue>42IPPRUjJxCNDHEBLCAJI4/NyLpLueZSBzUXO69lVdZU8+nLpxO+opnbZNxqddyzNnbCO1Uk2Da3ljExkqnLIxT2zs90JAhZvJ5ljIgCipq7ZEp7zHOpvTH9fBGoZJJWhgdddOrHZsLDE9mILjlvBHDhPQrYcMHtY6oLIbxJq92it82iBJv0fS7v1S/o0p4hAtfky+6hXCZWSKUJHr88NDrKe2EEK3mazD2QD5Ozf/w=</CipherValue>
 </CipherData

3) Para otro tipos de password que esten en appSetting, podemos usar esta técnica:

<appSettings file="..\..\AppSettingsSecrets.config">
   <add key="webpages:Version" value="3.0.0.0" />
   <add key="webpages:Enabled" value="false" />
   <add key="ClientValidationEnabled" value="true" />
   <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

MS-Link: Prácticas recomendadas para implementar las contraseñas y datos confidenciales en applicaciones

Espero que sea de utilidad.

IIS: WebDAV interfiere peticiones PUT y DELETE en servicio WebApi

iis7-banner

Si estas publicando WebAPI en un servidor con IIS7, IIS7.5, IIS8 funcionará bien para las peticiones GET y POST con solo crear el sitio y dejarlo funcionando.

Pero encontraras problemas para responder a las peticiones con los verbos PUT y DELETE porque por defecto, el IIS no responde a estos verbos y se tiene que configurar la extensión del protocolo WebDAV o bien desactivarlo y modificar vuestro web.config

Opción 1 – Activar todos los verbos en WebDAV

  1. Abrir el IIS Manager en el servidor donde está la aplicación web
  2. Seleccionar la aplicacion web en el árbol de «sites» que tiene el servicio WebAPI
  3. Seleccionar el «Handler Mappings» de la aplicación en las opciones del IIS
  4. En la lista que aparece en pantalla, seleccionar double click en «WebDAV»
  5. Pulsar click en «Request Restrictions»
  6. En el tabulador «Verbs» seleccionar «All verbs»
  7. Pulsar OK para guardar los cambios

En la imagen se muestra donde están las opciones a configurar en nuestro IIS:

iis7-handler-webdav

Opción 2 – Desactivar protocolo WebDAV en archivo web.config

Desactivar el protocolo WebDAV y permitir las opciones mediante