Pergunta

Tenho um serviço web que consulta dados desse arquivo json, mas não quero que o serviço web tenha que acessar o arquivo todas as vezes.Estou pensando que talvez eu possa armazenar os dados em outro lugar (talvez na memória) para que o serviço da Web possa obter os dados de lá na próxima vez que tentar consultar os mesmos dados.Eu meio que entendo o que precisa ser feito, mas não tenho certeza de como realmente fazer isso.Como persistimos dados em um serviço web?

Atualizar:Ambas as sugestões, armazenamento em cache e uso de variáveis ​​estáticas, parecem boas.Talvez eu deva usar os dois para poder ver um primeiro, e se não estiver lá, use o segundo, se também não estiver, então darei uma olhada no arquivo json.

Foi útil?

Solução

Estendendo em ^^ calor 's idéia , você pode querer pensar sobre onde você iria armazenar em cache - ou armazenar em cache o conteúdo do arquivo json no cache de aplicativos como assim:

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

E, em seguida, gerar os resultados que você precisa de que em cada hit. Alternativamente, você pode armazenar em cache a saída webservice na definição de função:

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

Informações recolhidas a partir XML Web Service Caching Estratégias .

Outras dicas

Que tal usar um objeto global ou estático coleção? É que uma boa idéia?

ASP.NET caching funciona tão bem com os serviços da Web para que você possa implementar cache regular como explicado aqui: http://msdn.microsoft.com/en-us/library/aa478965.aspx

Para eco klughing , se seus dados isn JSON 't esperado para mudar muitas vezes, eu acho que a maneira mais simples para armazenar em cache é usar uma coleção estática de algum tipo -. talvez um DataTable

Em primeiro lugar, analisar os dados JSON em um System.Data.DataTable, e torná-lo estático em sua classe de serviço da Web. Em seguida, acessar o objeto estático. Os dados devem permanecer em cache até que o IIS recicla o pool de aplicativos.

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();
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top