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

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

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

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

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

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

Основные параметры

1 голос
/ 31 мая 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");

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

0 голосов
/ 05 мая 2011

Да.Вам нужно будет создать свой хост WCF в режиме синглтона .Смотрите этот связанный вопрос .

...