Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

ServiceStack:restabelecer o pipeline ao invocar um serviço manualmente?


Quais partes do pipeline são perdidas?

Nenhum pipeline de solicitação é executado:
myRequestService.Any(e.Request);

Está apenas invocando fisicamente o Any Método C# do seu MyRequestService classe, ele não faz (nem pode) fazer mais nada.

A maneira recomendada de invocar outros Serviços durante uma Solicitação de Serviço é usar o Gateway de Serviço.

Mas se você quiser invocar um serviço fora de uma solicitação HTTP, você pode usar o gateway RPC para executar serviços não confiáveis, pois ele invoca todo o pipeline de solicitação e converte respostas de erro HTTP em respostas de erro digitado:
HostContext.AppHost.RpcGateway.ExecuteAsync()

Para executar serviços internos/confiáveis ​​fora de uma solicitação de serviço, você pode usar HostContext.AppHost.ExecuteMessage conforme usado pelo ServiceStack MQ, que aplica filtros de solicitação/resposta de solicitação de mensagem, filtros de ação de serviço e eventos.

Eu me registrei com container.AddScoped

Não use dependências com escopo de solicitação fora de uma solicitação HTTP, use Singleton se as dependências forem ThreadSafe, caso contrário, registre-as como transitórias. Se você precisar passar o armazenamento por solicitação, passe-os em IRequest.Items .