2017-02-06 4 views
0

Neuling für das ganze ASP.Net Rätsel !!Wiederverwendung eines Datenobjektmodells über mehrere Anfragen hinweg

Also habe ich eine Reihe von Web-API (Aktionen) in einer Steuerung, die nacheinander vom Client aufgerufen werden. Alle APIs hängen von einem Datenmodellobjekt ab, das aus der Datenbank abgerufen wird. Im Moment habe ich eine DAO-Schicht, die diese Daten holt und sie transparent zwischenspeichert. Es gibt also kein unmittelbares Problem, da es für jeden API-Aufruf keinen Hin- und Rückweg zur Datenbank gibt. Die DAO-Schicht wird jedoch von einem anderen Team verwaltet und gibt keine Garantie dafür, dass der Cache weiterhin existiert oder sich das Verhalten nicht ändert.

Nun würden sich die Eigenschaften oder Attribute des Modellobjekts ändern, aber nicht zu oft. Wenn ich die API-Aufrufe, die nacheinander von einem Client ausgeführt werden, als ein Bündel referenziere, kann ich sicher annehmen, dass das Bündel diese Daten tatsächlich einmal abfragen und verwenden kann, ohne sich um Wertänderungen kümmern zu müssen. Wie kann ich das erreichen? Gibt es irgendwo in der ASP.Net-Welt ein Entwurfsmuster, das ich verwenden kann? Ich möchte diesen Wert in einem periodischen Intervall abrufen und aktualisieren, falls einer der API-Aufrufe fehlschlägt und anzeigt, dass sich die zugrunde liegenden Werte geändert haben.

+0

Sie müssen [Sitzungsstatus] (https://msdn.microsoft.com/en-us/library/ms178581.aspx) für jedes "Bundle" erstellen. Das bedeutet, Staatenlosigkeit zu vermeiden (was Ihre Leistung beeinträchtigt) und Sie müssen definieren, wann eine Sitzung beginnt und wann sie endet, dh einen Weg finden, wie das Programm den Anfang und das Ende eines "Bündels" erkennt und erkennt (und ausschließt)) wenn während desselben Zeitraums Transaktionen von einem anderen Kunden eingehen. Erfordert der Dienst eine Authentifizierung? –

+0

Ja, der Dienst benötigt Authentifizierung. Grundsätzlich werden alle API-Aufrufe mit einem Sitzungstoken authentifiziert – Dibzmania

Antwort

0

Es gibt ein paar Techniken, die verwendet werden könnten. Erstens, gibt es einen Grund für die Notwendigkeit eines zweiten Caches, weil Ihre Data Access Layer es bereits hat, oder?

Sie einen Cache auf dem Web API Ansprechschwelle platzieren können Strathweb.CacheOutput und rief einen Dritten Bibliothek unter Verwendung von:

CacheOutput kümmert sich um serverseitige Caching und stellen Sie den entsprechenden Client-Seite (Antwort) headers für dich.

Sie können auch die Daten aus dem Datenzugriffsschicht-Cache durch einen manuellen Ansatz unter Verwendung des Memory von System.Runtime.Caching.

Je nachdem, was die Infrastruktur zur Verfügung, verteilten Caches wie Cassandra oder Redis kann die beste Wahl sein.

Verwandte Themen