Domanda

Ho un servizio Web che interroga i dati da questo file json, ma non voglio che il servizio Web debba accedere al file ogni volta.Sto pensando che forse posso archiviare i dati da qualche altra parte (magari in memoria) in modo che il servizio Web possa semplicemente ottenere i dati da lì la prossima volta che tenta di interrogare gli stessi dati.In un certo senso capisco cosa sia necessario fare, ma non sono sicuro di come farlo effettivamente.Come persistiamo i dati in un servizio web?

Aggiornamento:Entrambi i suggerimenti, la memorizzazione nella cache e l'utilizzo di variabili statiche, sembrano buoni.Forse dovrei semplicemente usarli entrambi così posso guardarne prima uno e, se non è lì, usare il secondo, se non è neanche lì, allora guarderò il file json.

È stato utile?

Soluzione

Prolungamento Ghiaccio^^Calore's idea, potresti voler pensare a dove mettere nella cache - o memorizzare nella cache il contenuto del file json nella cache dell'applicazione in questo modo:

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

E poi genera i risultati di cui hai bisogno da quello ad ogni colpo.In alternativa è possibile memorizzare nella cache l'output del servizio web sulla definizione della funzione:

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

Informazioni raccolte da Strategie di memorizzazione nella cache dei servizi Web XML.

Altri suggerimenti

Che ne dici di usare un oggetto di raccolta globale o statico?È una buona idea?

La memorizzazione nella cache ASP.NET funziona altrettanto bene con i servizi Web, quindi è possibile implementare la memorizzazione nella cache regolare come spiegato qui: http://msdn.microsoft.com/en-us/library/aa478965.aspx

Per riecheggiare kluughing, se non si prevede che i tuoi dati JSON cambino spesso, penso che il modo più semplice per memorizzarli nella cache sia utilizzare una raccolta statica di qualche tipo, forse un DataTable.

Innanzitutto, analizza i tuoi dati JSON in un System.Data.DataTable e rendili statici nella classe del servizio Web.Quindi, accedi all'oggetto statico.I dati dovrebbero rimanere memorizzati nella cache finché IIS non ricicla il pool di applicazioni.

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();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top