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

У меня есть обычная служба Windows, которая обрабатывает большой набор данных и сохраняет их в БД. Эта служба Windows также служит для размещения службы WCF, которая обслуживает обработанные данные до одного или нескольких графических интерфейсов пользователя.

В настоящее время служба WCF должна обратиться к базе данных хотя бы один раз, чтобы получить данные для клиента, но размер набора данных таков, что это происходит очень медленно и потребляет много памяти из-за дублирования данных. В идеале я хотел бы поделиться результатами обработки данных напрямую (в памяти) со службой WCF. Есть ли способ сделать это?


person Franchesca    schedule 05.05.2011    source источник


Ответы (3)


Да, с использованием механизма распределенного кеширования.

По сути, механизм распределенного кеширования - это отдельный процесс, работающий на одной или нескольких машинах, который управляет кешем. Этот кеш-сайт находится в собственном процессе, и обычно механизм кеширования предоставляет API для доступа к этим данным.

Основные варианты:

person Jaimal Chohan    schedule 05.05.2011

На самом деле, мой коллега обнаружил, что можно получить доступ к службе WCF с хоста с помощью статических методов, и вам даже не нужно иметь службу в одноэлементном режиме.

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class MyWcfService : IMyWcfService
{
    private static string messageFromHost;

    public static void PassMessageFromHostToService(string message)
    {
        messageFromHost = message;
    }
// Other methods fulfilling the service contract here...
}

Затем из хост-процесса вы можете сделать это, чтобы вызвать метод:

MyWcfService.PassMessageFromHostToService("I'm a message from your host");

Я не уверен, считается ли это плохой практикой, или это вызовет какие-то проблемы, которые мы не рассматривали, но, похоже, у меня это работает :)

person Franchesca    schedule 31.05.2011