Используя .net 4.6, у меня есть служба Windows с таймером, который просыпается каждый день в настроенное время, подключается к удаленной базе данных и кэширует некоторые данные в памяти с помощью класса MemoryCache:
string id = rec.ID;
string surname = rec.Surname;
string dateOfBirth = rec.DateOfBirth;
string agreement = rec.Agreement;
CachedData cd = new CachedData(id, surname, dateOfBirth, agreement);
MemoryCache.Default.Set(id, cd, new DateTimeOffset(DateTime.Now.AddDays(1)));
Мне нужно открыть интерфейс поиска в этом MemoryCache. У меня есть отдельная служба WCF, которая предоставляет интерфейс поиска, но я не знаю, как передать запрос/результат поиска между службой WCf и службой Windows, поэтому, если я получу идентификатор в службе WCf:
string id = HttpContext.Current.Request.QueryString.Get("id");
Я мог бы передать его службе Windows, которая искала бы его в кеше памяти и возвращала результат.
Я подписался на https://msdn.microsoft.com/en-us/library/ff649818.aspx для размещения службы wcf в службе Windows. В конце я просто добавил следующее в метод OnStart() класса Service1.cs моего WindowsService:
MemoryCache.Default.Set("K", "Hello World", new DateTimeOffset(DateTime.Now.AddDays(1)));
и предполагая, что, поскольку служба WCF (также называемая Service1.cs) теперь размещается в службе Windows и будет использовать один и тот же домен приложения, я изменил метод GetData по умолчанию в WCF следующим образом:
public string GetData(int value)
{
var kv = MemoryCache.Default["K"] as string;
if (kv != null)
{
return kv;
}
else
{
return string.Format("Entered: {0}", value);
}
}
Однако, когда я использую тестовый клиент и вызываю GetData, он не может найти кешированный элемент в MemoryCache.