Estoy implementando mi primer servicio REST en .NET 4 y he encontrado algo inesperado. Parece que no entiendo el funcionamiento subyacente de ServiceModel de Microsoft, pero no pude encontrar la respuesta de la manera tradicional.Uso del conjunto de subprocesos en la implementación del servicio REST .NET
Para poner en práctica mi servicio web que estaba siguiendo los pasos de este tutorial: http://blogs.msdn.com/b/endpoint/archive/2010/01/06/introducing-wcf-webhttp-services-in-net-4.aspx
funciona el servicio. Lo que me sorprendió fue que Application_BeginRequest y Application_EndRequest en Global.asax son llamados por diferentes subprocesos. Al observar el seguimiento de la pila, parece que estos subprocesos se basan en algún tipo de grupo de subprocesos.
Sin hacer algunas refactorizaciones, este es un problema para nosotros ya que siempre asumíamos que una única solicitud siempre se ejecutaría en el mismo subproceso, por lo que mantendríamos algunas variables almacenadas en el almacenamiento local de subprocesos. Las variables se inicializan en Application_BeginRequest y se lanzan en Application_EndRequest. Parece que con ServiceModel este no es el enfoque correcto.
Mis preguntas son:
- ¿Puedo hacer ninguna suposición sobre los flujos en ejecución mi código cuando estoy usando ServiceModel?
- ¿Hay alguna forma de restringir la ejecución a un único hilo? ¿Esto sería malo por alguna razón?
- ¿Cuál es la forma correcta de almacenar una variable durante la duración de la solicitud cuando se utiliza ServiceModel?
Gracias.
Actualización a la pregunta inicial. Su único hilo llama a Application_BeginRequest y un hilo diferente ejecuta el código de servicio y ejecuta Application_EndRequest. Cambiar los parámetros de Service Behavior no hizo nada. Cualquier ayuda sería muy apreciada. – Alex
Parece que está usando material de compatibilidad asp.net o intenta hacerlo. ¿Has intentado implementar tus cosas como despachadores de mensajes o cualquier otro punto de extensión wcf (en lugar de usar asp.net)? – sisve
@Simon Svensson Estaba siguiendo el tutorial de Microsoft http://blogs.msdn.com/b/endpoint/archive/2010/01/06/introducing-wcf-webhttp-services-in-net-4.aspx. Lo cual parece usar compatibilidad asp.net. ¿Qué sería diferente si se usa el otro enfoque? ¿Hay algún buen lugar donde pueda leerlo? ¡Gracias! – Alex