Pregunta

Estoy haciendo un trabajo asincrónico en un hilo separado usando:

ThreadPool.QueueUserWorkItem()

y en este hilo separado, necesito llamar HttpContext.Current para que pueda acceder a:

HttpContext.Current.Cache  
HttpContext.Current.Server  
HttpContext.Current.Request  

Sin embargo, HttpContext.Current es nulo cuando creo este hilo separado.

Pregunta

¿Cómo creo un hilo nuevo para que HttpContext.Current ¿No es nulo?¿O hay otra forma de acceder a los objetos Caché, Servidor y Solicitud?

¿Fue útil?

Solución

que iba a tratar de no contener una referencia a un objeto que depende de la pila ASP.NET como el HttpContext. Si necesita hacer algún trabajo en un hilo diferente, es porque no quiere esperar en el ASP.NET uno hasta que su tarea está terminada. Y tal vez la Solicitud / Contexto / sesión se termina mientras que el hilo no lo es.

Usted debe pasar un objeto con los datos necesarios para su hilo.

Otros consejos

Puede acceder a la memoria caché de ASP.NET con HttpRuntime.Cache , incluso cuando usted no tiene una HttpContext, pero por desgracia no se puede tener acceso a servidor o solicitud.

Si se piensa en ello, esto sentido -. No están sirviendo cualquier página de modo que usted no tiene una solicitud

1- Añadir un código de fondo en <system.serviceModel> en el archivo Web.config:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

2- Añadir un código de fondo después de espacio de nombres de archivos de servicios web:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

3- proyecto de reconstrucción de elementos web. Hecho!

referencia

Para HttpContext.Server servicios que pueden utilizar HttpServerUtility clase. Para el caché puede utilizar HttpRuntime.Cache, como se ha dicho anteriormente. Para el objeto de solicitud se pueden pasar los datos de la solicitud al hilo cuando se crea. Cosas como Request.QueryString o Request.Form ... o lo que sea.

No es una implementación de grupo de subprocesos aquí que proporciona propagación de contexto HTTP del subproceso de llamada . No he utilizado todavía, pero planeo.

Si el hilo separado está tratando de acceder a esos objetos, entonces sí que será nulo. Esos objetos están en el ámbito a nivel de hilo. Si desea utilizarlos en un nuevo hilo tendrá que pasarlos en el método / clase donde los necesite.

Normalmente ASP.Net no le permite a desovar nuevos temas ... Aquí es un poner sobre el tema.

Aquí es un buen escribir sobre roscado en ASP.NET de MSDN .

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