Como faço para recuperar as propriedades HttpContext quando ele retorna nulo?

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

  •  22-08-2019
  •  | 
  •  

Pergunta

Eu estou fazendo algum trabalho assíncrono em um segmento separado usando:

ThreadPool.QueueUserWorkItem()

e neste segmento separado, eu preciso HttpContext.Current chamada para que eu possa acessar:

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

No entanto, HttpContext.Current é nulo quando eu criar esta thread separada.

Pergunta

Como faço para criar um novo segmento para que HttpContext.Current não é nulo? Ou existe outra maneira que eu posso acessar o cache, Server, e solicitar objetos?

Foi útil?

Solução

Eu tento não manter uma referência a um objeto que depende da pilha ASP.NET como o HttpContext. Se você precisa fazer algum trabalho em um segmento diferente, é porque você não quer esperar na única ASP.NET até que sua tarefa está concluída. E talvez o Pedido / Context / sessão é encerrada enquanto a sua discussão não é.

Você deve passar um objeto com os dados necessários para a sua discussão.

Outras dicas

Você pode acessar o cache ASP.NET com HttpRuntime.Cache , mesmo quando você não tem um HttpContext, mas, infelizmente, você não pode acessar Server ou solicitação.

Se você pensar bem, isso faz sentido -. Você não está servindo qualquer página que você não tem um pedido

1- Adicione código fundo em <system.serviceModel> no arquivo Web.config:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

2- Adicione código de fundo depois de namespace no arquivo de serviço web:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

3 reconstruir parte projeto web. Feito!

referência

Para HttpContext.Server serviços você pode usar HttpServerUtility classe. Para o Cache você pode usar HttpRuntime.Cache, como foi dito acima. Para o objeto pedido, pode passar os dados a partir da solicitação para o segmento quando ele é criado. Coisas como Request.QueryString ou Request.Form ... ou o que quer.

Há uma implementação pool de threads aqui que fornece propagação de contexto HTTP do segmento de chamada . Eu não usei ainda, mas eu pretendo.

Se o thread separada está tentando acessar esses objetos, então sim eles vão ser nulo. Esses objetos são escopo no nível do segmento. Se você quiser usá-los em um novo segmento terá de passá-los para o método / classe onde você precisar deles.

Normalmente ASP.Net não permite que você para gerar novos tópicos ... Aqui é um post sobre o assunto.

Aqui está uma boa escrever-se na rosqueamento em ASP.NET do MSDN .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top