2008-08-14 10 views
4

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 möglicherweise irgendwo anders speichern kann (vielleicht im Speicher), damit der Web-Service die Daten von dort wiederbekommt, wenn er das nächste Mal versucht, dieselben Daten abzufragen. Ich verstehe irgendwie, was getan werden muss, aber ich bin mir nicht sicher, wie ich es tatsächlich machen soll. Wie speichern wir Daten in einem Webdienst?beste Möglichkeit, Daten im .NET-Webdienst zu persistieren

Update: Beide Vorschläge, Caching und statische Variablen verwenden, sehen gut aus. Vielleicht sollte ich nur beide verwenden, damit ich mir zuerst eine anschauen kann, und wenn sie nicht da ist, benutze die zweite, wenn sie auch nicht da ist, dann schaue ich mir die json-Datei an.

Antwort

6

Erweiterung auf Ice^^Heat ‚s Idee, sollten Sie darüber nachdenken, wo man cachen würde - entweder den Inhalt der JSON-Datei im Anwendungs ​​Cache Cache wie folgt:

Context.Cache.Insert("foo", _ 
       Foo, _ 
       Nothing, _ 
       DateAdd(DateInterval.Minute, 30, Now()), _ 
       System.Web.Caching.Cache.NoSlidingExpiration) 

Und dann erzeugen die Ergebnisse, die Sie brauche das bei jedem Treffer. Alternativ können Sie den Webservice Ausgang auf der Definition der Funktion Cache:

<WebMethod(CacheDuration:=60)> _ 
Public Function HelloWorld() As String 
    Return "Hello World" 
End Function 

Info von XML Web Service Caching Strategies gesammelt.

3

Was ist ein globales oder statisches Sammlung Objekt mit? Ist das eine gute Idee?

2

Zum Echo klughing, wenn Ihre JSON-Daten nicht häufig geändert werden, denke ich, die einfachste Möglichkeit, es zwischenzuspeichern, ist die Verwendung einer statischen Sammlung einer Art - vielleicht eine DataTable.

Analysieren Sie zuerst Ihre JSON-Daten in eine System.Data.DataTable und machen Sie sie in Ihrer Web-Service-Klasse 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(); 
    } 
} 
Verwandte Themen