Redis
 sql >> Datenbank >  >> NoSQL >> Redis

ServiceStack:Wiederherstellung der Pipeline beim manuellen Aufrufen eines Dienstes?

Welche Teile der Pipeline gehen verloren?

Keine der Anfragepipelines wird ausgeführt:

myRequestService.Any(e.Request);

Ruft physisch nur Any auf C#-Methode Ihres MyRequestService Klasse, es tut (noch kann) nichts anderes.

Die empfohlene Methode zum Aufrufen anderer Dienste während einer Dienstanforderung ist die Verwendung des Dienst-Gateways.

Wenn Sie jedoch einen Dienst außerhalb einer HTTP-Anforderung aufrufen möchten, können Sie das RPC-Gateway zum Ausführen nicht vertrauenswürdiger Dienste verwenden, da es die vollständige Anforderungspipeline aufruft und HTTP-Fehlerantworten in typisierte Fehlerantworten umwandelt:

HostContext.AppHost.RpcGateway.ExecuteAsync()

Zum Ausführen interner/vertrauenswürdiger Dienste außerhalb einer Dienstanforderung können Sie HostContext.AppHost.ExecuteMessage verwenden, wie es von ServiceStack MQ verwendet wird, das Nachrichtenanforderungs-Anforderungs-/Antwortfilter, Dienstaktionsfilter und Ereignisse anwendet.

Ich habe mich bei container.AddScoped

registriert

Verwenden Sie keine Request Scoped-Abhängigkeiten außerhalb einer HTTP-Anforderung, verwenden Sie Singleton, wenn die Abhängigkeiten ThreadSafe sind, und registrieren Sie sie andernfalls als Transient. Wenn Sie die Speicherung pro Anfrage übergeben müssen, übergeben Sie sie in IRequest.Items .