Redis
 sql >> Base de données >  >> NoSQL >> Redis

ServiceStack :Rétablir le pipeline lors de l'appel manuel d'un service ?

Quelles parties du pipeline sont perdues ?

Aucun pipeline de requête n'est exécuté :

myRequestService.Any(e.Request);

Invoque physiquement uniquement le Any Méthode C# de votre MyRequestService class, il ne fait (ni ne peut) rien faire d'autre.

La méthode recommandée pour invoquer d'autres services lors d'une demande de service consiste à utiliser la passerelle de service.

Mais si vous souhaitez appeler un service en dehors d'une requête HTTP, vous pouvez utiliser la passerelle RPC pour exécuter des services non approuvés car elle appelle le pipeline de requête complet et convertit les réponses d'erreur HTTP en réponses d'erreur typées :

HostContext.AppHost.RpcGateway.ExecuteAsync()

Pour exécuter des services internes/de confiance en dehors d'une demande de service, vous pouvez utiliser HostContext.AppHost.ExecuteMessage tel qu'utilisé par ServiceStack MQ qui applique les filtres de demande/réponse de demande de message, les filtres d'action de service et les événements.

Je me suis inscrit avec container.AddScoped

N'utilisez pas les dépendances Request Scoped en dehors d'une requête HTTP, utilisez Singleton si les dépendances sont ThreadSafe, sinon enregistrez-les comme Transient. Si vous avez besoin de passer un stockage par requête, passez-les dans IRequest.Items .