¿Hay alguna garantía sobre cuándo IIS podría reciclarse mientras se procesa una operación WCF de 1 vía?

StackOverflow https://stackoverflow.com/questions/326382

  •  11-07-2019
  •  | 
  •  

Pregunta

Fondo

Esta pregunta tiene dos partes.

Tengo una operación WCF unidireccional alojada en IIS 6. Lo siguiente es mi comprensión de cómo funciona esto:

  

_1. IIS recibe una solicitud.

     

_2. IIS envía una respuesta HTTP 202 (gracias, lo procesaré más tarde).

     

_3. IIS llama a mi operación de WCF unidireccional.

Ahora el control pasa a mi operación WCF que hace lo siguiente:

  

_4. Persista la información de la solicitud en una tienda transaccional y duradera.

     

_5. Comience a procesar la solicitud en la base de datos OLTP.

     

_6. Si hay un error, repita desde el paso 5 o tome alguna medida correctiva, luego limpie los datos persistentes en el paso 4.

Pregunta 1

¿Entiendo que IIS envía la respuesta HTTP 202 correcta?

Pregunta 2

Si IIS recicla entre el paso 2 y el paso 4, podría perder la información de la solicitud antes de tener un cambio para persistir, pero después de que el cliente piense que he aceptado el mensaje. ¿Hay alguna garantía proporcionada por IIS sobre cuándo se reciclará o no cuando haya solicitudes pendientes?


PD: Disculpe el formato poco fiable. Por alguna razón, Markdown estaba arruinando totalmente mis elementos de la lista numerada.

¿Fue útil?

Solución

No estoy seguro de que su suposición sea correcta.

Incluso para la interacción unidireccional, WCF puede ser muy invocado antes de que se devuelva el 202; si usa autenticación, por ejemplo, todo tiene que suceder antes de que se llame al método y antes de que se devuelva 202, de modo que si hay algún problema, se puedan informar.

Si usa wsHttpBinding, por ejemplo, fuera de la caja, verá 2-3 intercambios de mensajes que resultan en 200 antes de la llamada al método real. esto es para intercambiar información de seguridad y establecer un contexto de seguridad.

Es cierto que si configuró su servicio para que no tenga seguridad, esto no sucederá y devolverá 202 inmediatamente, pero esto sugiere que tiene que saber si puede hacerlo desde la pila WCF.

Todo eso aparte: no estoy seguro de lo que está tratando de lograr, ¿a qué reciclaje de IIS se refiere? No soy un experto en IIS, pero dudo que recicle el host mientras algo se está ejecutando activamente; si se está refiriendo a alguien que está reiniciando manualmente el grupo de aplicaciones (o IIS, o la máquina para el caso) dudo que haya mucho que pueda hacer.

Si tiene que saber con certeza que un mensaje no se pierde, la única forma de garantizarlo es mediante el uso de mensajes confiables de una forma u otra, que solo reconoce las solicitudes que una vez persistieron en una tienda duradera;

Otros consejos

En mi opinión, hay un par de cosas que sugeriría:

La única forma que conozco para administrar el reciclaje de procesos en IIS es mirar el grupo de aplicaciones que usa su sitio web. Si abre el Administrador de IIS - > Grupos de aplicaciones - > seleccione su grupo y luego haga clic con el botón derecho en las propiedades, en la pestaña Reciclaje hay opciones que pueden ayudarlo. Supongo que eso no garantiza que no perderá solicitudes en un reciclaje, pero establecer un tiempo más largo reduce la probabilidad de tal caso.

Sin embargo, parece que el tipo de sistema que está buscando construir es un candidato ideal para MSMQ, que puede proporcionar solicitudes de servicio asincrónicas que se ponen en cola correctamente con muy poca sobrecarga o plomería manual. Eso le permitiría evitar por completo el problema de reciclaje de todo el proceso. No estoy seguro de si esa es una opción para su escenario, pero podría ser algo a tener en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top