Я работаю над веб-сервисом для чтения данных из стороннего канала, немного его модифицирую и сохраняю, а затем возвращаю его своим клиентам. Он должен обновляться только с стороннего сайта. Он будет работать как служба WCF в веб-роли в Azure.Как архивировать кеш веб-службы в C#
Сначала я думал, что я просто всегда позвонить в мой parsefeed метод, но сделать это обратный звонок, если последнее обновление было слишком рано ...
public void ParseFeed()
{
if (DateTime.Now > lastrun.AddMinutes(1))
{
//Fetch updated data into something shared here.
//thedata is a public static in Global class
thedata = fetchdata();
lastrun=DateTime.Now;
}
}
Но я предполагаю, что, поскольку выборка может возьмите 1-2 (ее веб-сервис), чтобы сразу несколько пользователей сразу попали в этот код.
из http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607 Поскольку статические члены любого класса, в том числе класса приложения, не поточно-код, пользователь должен предоставить соответствующую блокировку для доступа к статическим членам. Это относится к любому статическому члену, который вы добавляете в класс приложения.
я мог бы использовать замок (не знаю, как) EDIT: много информации here
Я мог бы избежать статического вар и использовать кэш-память, и кладу в нем данные (но это будет удаляться по истечении срока действия, а несколько пользователей будут пытаться извлекать данные)
Я мог бы использовать кэш с поддельным элементом данных в нем (в основном как таймер) и обновлять, когда это истекло, но это будет обновляться, даже если никто ударил по сайту. (Может также не быть потокобезопасным)
Я не могу использовать выходной кэш, потому что клиенты запрашивают данные, которые я возвращаю, таким образом, что, возможно, делает каждый запрос уникальным: мои сервисы сортируются и фильтруются в соответствии с запросом
BTW Я не беспокоюсь о согласованности результатов над несколькими экземплярами на Azure. Каждый из них может получить свои собственные, поэтому мне не нужно предоставлять доступ к нескольким серверам.
У меня такое ощущение, что есть простое решение, которое я полностью пропустил. Идеи?
Я заметил этот http://stackoverflow.com/questions/39112/what-is-the-best-way-to-lock-cache-in-asp-net#40065, который показывает, как управлять замками. Это может быть применимо к большинству опций и по-прежнему оставляет вопрос о том, использовать ли кеш, статические вары или если есть более простой механизм – Andiih 2010-11-26 09:53:24