beste Möglichkeit, Daten im .NET-Webdienst beizubehalten
-
08-06-2019 - |
Frage
Ich habe einen Webdienst, der Daten aus dieser JSON-Datei abfragt, aber ich möchte nicht, dass der Webdienst jedes Mal auf die Datei zugreifen muss.Ich denke, dass ich die Daten vielleicht woanders speichern kann (vielleicht im Speicher), damit der Webdienst die Daten einfach von dort abrufen kann, wenn er das nächste Mal versucht, dieselben Daten abzufragen.Ich verstehe einigermaßen, was getan werden muss, bin mir aber nicht sicher, wie ich es tatsächlich tun soll.Wie bewahren wir Daten in einem Webdienst auf?
Aktualisieren:Beide Vorschläge, Caching und die Verwendung statischer Variablen, sehen gut aus.Vielleicht sollte ich einfach beide verwenden, damit ich mir zuerst eine ansehen kann, und wenn sie nicht drin ist, verwende ich die zweite. Wenn sie auch nicht drin ist, schaue ich mir die JSON-Datei an.
Lösung
Weiter verlängern Eis^^HitzeWenn Sie die Idee haben, möchten Sie vielleicht darüber nachdenken, wo Sie zwischenspeichern würden – entweder den Inhalt der JSON-Datei im Anwendungscache zwischenspeichern, etwa so:
Context.Cache.Insert("foo", _
Foo, _
Nothing, _
DateAdd(DateInterval.Minute, 30, Now()), _
System.Web.Caching.Cache.NoSlidingExpiration)
Und generieren Sie daraus dann bei jedem Treffer die Ergebnisse, die Sie benötigen.Alternativ können Sie die Webservice-Ausgabe in der Funktionsdefinition zwischenspeichern:
<WebMethod(CacheDuration:=60)> _
Public Function HelloWorld() As String
Return "Hello World"
End Function
Informationen gesammelt von Caching-Strategien für XML-Webdienste.
Andere Tipps
Wie wäre es mit der Verwendung eines globalen oder statischen Sammlungsobjekts?Ist das eine gute Idee?
ASP.NET-Caching funktioniert genauso gut mit Webdiensten, sodass Sie reguläres Caching wie hier erläutert implementieren können: http://msdn.microsoft.com/en-us/library/aa478965.aspx
Echo Klughing, Wenn nicht damit zu rechnen ist, dass sich Ihre JSON-Daten häufig ändern, besteht meiner Meinung nach der einfachste Weg, sie zwischenzuspeichern, darin, eine statische Sammlung zu verwenden – vielleicht eine DataTable.
Analysieren Sie zunächst Ihre JSON-Daten in eine System.Data.DataTable und machen Sie sie in Ihrer Webdienstklasse statisch.Greifen Sie dann auf das statische Objekt zu.Die Daten sollten zwischengespeichert bleiben, bis IIS Ihren Anwendungspool recycelt.
public class WebServiceClass
{
private static DataTable _myData = null;
public static DataTable MyData
{
get
{
if (_myData == null)
{
_myData = ParseJsonDataReturnDT();
}
return _myData;
}
}
[WebMethod]
public string GetData()
{
//... do some stuff with MyData and return a string ...
return MyData.Rows[0]["MyColumn"].ToString();
}
}