La propiedad de reciclaje ShutdownTimeLimit del grupo de aplicaciones de IIS no se aplica a los servicios WCF hospedados en WAS con net.tcp

Este artículo le ayuda a resolver el problema en el que la propiedad de reciclaje del grupo de aplicaciones de Microsoft Internet Information Services (IIS) no se aplica a los servicios de Communication Foundation (WCF) hospedados por WAS mediante ShutdownTimeLimit net.tcp.

Versión del producto original:   Internet Information Services
Número KB original:   2819362

Síntomas

Después de implementar un servicio WCF Windows hospedado por el servicio de activación de Windows (WAS), el grupo de aplicaciones de IIS asignado a la aplicación tiene un tiempo de apagado de reciclaje establecido en ShutdownTimeLimit 90 segundos. Esto permite que el tiempo de servicio WCF complete los elementos de trabajo activos en caso de que se recicle el grupo de aplicaciones. Sin embargo, cuando se produce el reciclaje de la aplicación, el proceso de trabajo existente se cierra antes de 90 segundos, lo que impide que se complete el trabajo activo.

Causa

Este comportamiento es una característica del diseño de la aplicación.

Net.tcp se comporta de forma diferente que el Protocolo de transferencia de hipertexto (HTTP) en presencia de un reciclaje del grupo de aplicaciones de IIS y anula la conexión antes de que se alcance el temporizador, cerrando el proceso de trabajo que estaba administrando la ShutdownTimeLimit solicitud. Las aplicaciones HTTP respetarán el temporizador, pero las aplicaciones ShutdownTimeLimit net.tcp no lo hacen.

El problema subyacente es que cuando se produce el reciclaje del grupo de aplicaciones de IIS, se pierde la información de sesión para el canal net.tcp. Cuando se reinicia el grupo de aplicaciones, puede volver a abrir un canal HTTP mientras IIS controla la información del canal, pero para la conexión net.tcp es SMSvcHost.exe que controla realmente este canal. IIS no vuelve a activar el SMSvcHost.exe para volver a abrir el canal. En ese momento, la conexión de cliente se ha cerrado y el cliente debe reiniciar la comunicación.

La implementación de NET.tcp WAS usa SMSvcHost.exe para escuchar las solicitudes TCP entrantes. Cuando se recibe, SMSvcHost.exe una conexión de canalización con nombre interna para invocar el servicio WCF correspondiente. Se trata efectivamente de un canal dúplex invisible. Cuando se recicla el grupo de aplicaciones de IIS, se pierde información de estado de sesión y se rompe la conexión dúplex de canalización con nombre. Un tiempo de espera de un minuto codificado de forma SMSvcHost.exe aborta la conexión de socket.

Esto tiene dos consecuencias:

  • El canal de cliente obtiene una excepción de socket y debe volver a abrirse para volver a usarse.
  • La operación WCF que se estaba ejecutando se anula antes del valor del temporizador de IIS ShutdownTimeLimit normal. La conexión dúplex rota hace que WCF anule la operación.

Solución alternativa

Para solucionar este problema, considere la posibilidad de poner en cola el trabajo de limpieza necesario en algún lugar que no dependa del estado de la sesión, en lugar de depender del intervalo de IIS para realizar el trabajo de limpieza necesario en un período de tiempo ShutdownTimeLimit fijo.

Más información

También se recomienda instalar una revisión de Microsoft Conectar se ha retirado. Sin embargo, no resuelve este problema. Evita un problema relacionado en el que SMSvcHost.exe deja de responder a todas las solicitudes.