2013-05-24 3 views
0

В моем случае используется WCF для возврата данных из базы данных sqlserver. некоторые wcf способ использование в высокой частоте. поэтому он будет уделять больше внимания базе данных. можно использовать кеш в wcf, например кеш http, установить время истечения. в течение истечения срока действия, возвращайте кешированный datatable, out expire time, снова выберите данные из sqlserver. thx, я первый раз использую stackoverflow, и я из Китая, извините за мой бедный английский. ps: my wcf case использует winform/console как хост, а не iis.Как использовать кеш данных в WCF

+0

попробуйте использовать System.Caching, очень проста в использовании. Кроме того, если вы хотите, вы можете изучить некоторые из постоянных библиотек кэширования, таких как escent. – SutharMonil

ответ

0

Что-то вроде этого отвечает вашим потребностям? Это псевдокод, но я думаю, что это имеет смысл.

static DataTable dt; 
static DateTime LastPulled; 

public static void GetData() 
    { 
    if(LastPulled==null || DateTime.Now-LastPulled > new TimeSpan(5)) 
     { 
     //Retrieve DataTable from database 
     } 
    return dt; 
    } 

Также см Caching in WCF?

+0

использовать это может работать, но это слишком избыточно, есть ли общий класс для достижения этой цели? – wjlJack

+0

Не об этом я знаю. Если вам это нужно, было бы довольно легко сделать себя. Я бы использовал делегат, чтобы вы могли указать действие для своего класса для обновления данных. – mason

+0

Постарайтесь посмотреть http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx для существующих классов. – mason

4

Если вы используете .NET 4.0 или более поздней версии, вы можете использовать MemoryCache класс. Например:

ObjectCache cache = MemoryCache.Default; 

Вы можете хранить ваши DataSet в кэше с линией, как это:

cache["MyDataSet"] = myDataSet; // myDataSet is your DataSet 

Вы можете использовать следующую логику для получения DataSet:

if (cache["MyDataSet"] != null) 
{ 
    // Get your DataSet from the database 
} 
else 
{ 
    myDataSet = (DataSet)cache["MyDataSet"]; 
} 

Кроме того, взгляните на CacheItemPolicy, что позволит вам установить политики выселения и истечения срока действия для данного элемента в кеше.

+0

thx, я нахожу этот метод позже, как и ваш пост. Трудно решить, какой метод wcf использует кеш, и некоторые другие проблемы с синхронизацией. Если есть какой-либо способ получить изменение базы данных, если есть изменение, то выберите еще раз, иначе используйте кеш, то никакая проблема синхронизации. Надежда может найти способ хэш-таблицы в sqlserver, чтобы найти, изменилась ли таблица. – wjlJack

+0

Взгляните на [SqlChangeMonitor Class] (http://msdn.microsoft.com/en-us/library/system.runtime.caching.sqlchangemonitor.aspx) для одного из способов мониторинга изменений в базовом SQL. Вероятно, вам нужно будет контролировать таблицу и/или столбцы, а не сам DataSet (аналогично SqlCacheDepdency). – Tim

+0

См. Этот пример [.NET 4.0 MemoryCache с SqlChangeMonitor] (http://www.codeproject.com/Articles/167282/NET-4-0-MemoryCache-with-SqlChangeMonitor) для одного из способов сделать это (MSDN немного свет о том, как его использовать). – Tim

Смежные вопросы