sql >> Base de Datos >  >> NoSQL >> Redis

ServiceStack:¿Restablecer la canalización al invocar un servicio manualmente?

¿Qué partes de la tubería se pierden?

No se ejecuta ninguna canalización de solicitud:

myRequestService.Any(e.Request);

Solo está invocando físicamente el Any Método C# de su MyRequestService clase, no hace (ni puede) hacer nada más.

La forma recomendada de invocar otros Servicios durante una Solicitud de Servicio es usar el Gateway de Servicio.

Pero si desea invocar un servicio fuera de una solicitud HTTP, puede usar la puerta de enlace RPC para ejecutar servicios que no son de confianza, ya que invoca la canalización de solicitud completa y convierte las respuestas de error HTTP en respuestas de error escritas:

HostContext.AppHost.RpcGateway.ExecuteAsync()

Para ejecutar servicios internos/de confianza fuera de una solicitud de servicio, puede usar HostContext.AppHost.ExecuteMessage como lo usa ServiceStack MQ, que aplica filtros de solicitud/respuesta de solicitud de mensaje, filtros de acción de servicio y eventos.

Me he registrado con container.AddScoped

No use dependencias de ámbito de solicitud fuera de una solicitud HTTP, use Singleton si las dependencias son ThreadSafe, de lo contrario, regístrelas como transitorias. Si necesita pasar el almacenamiento por solicitud, hágalo en IRequest.Items .