melhor maneira de persistir dados no .NET Web Service
-
08-06-2019 - |
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.
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();
}
}