Повторное использование / кэширование данных в веб-сервисе - PullRequest
3 голосов
/ 30 декабря 2008

У меня есть веб-приложение, которое извлекает данные и отображает результаты. Из-за характера бизнеса все бизнес-правила включены в dll, которые веб-приложение должно использовать. Поскольку существует несколько сайтов, и мы не хотим включать основные dll во все развертываемые приложения, мы объединяем любые вызовы основных dll в веб-сервис. Это помогает, когда обновляются базовые библиотеки DLL, что нужно нажать только одно новое приложение (то есть веб-сервис).

С помощью этого architecutre я обнаружил, что любой, кто входит в любое веб-приложение, вызывает несколько обращений к базе данных, чтобы получить данные, которые затем анализируются. Данные, о которых идет речь, меняются медленно, и мне нужно обновлять их, возможно, раз в 4-6 часов.

Я знаком с хранением подобных вещей в сеансе, когда пользователь хочет видеть разные представления одного и того же объекта данных. Однако с веб-сервисом сеанс на самом деле не применяется. Что является хорошим методом для кэширования данных в веб-сервисе, чтобы мы не делали повторных дорогостоящих поездок в базу данных.

Веб-сервис и приложения все в C # и ASP.NET 2.0, и мы используем VS2005.

Ответы [ 3 ]

3 голосов
/ 24 января 2009

Как очень дешевый способ (но он существует), вы можете использовать свойство CacheDuration атрибута WebMethod, которое будет кэшировать результаты вызова веб-метода. Больше информации на:
Свойство CacheDuration

Это может помочь, просто мысль ...

1 голос
/ 30 декабря 2008

Дешевая опция # 1 : создайте таблицу данных в качестве локальной статической переменной для вашего класса веб-сервисов. Заполните объект данных в статическом конструкторе для класса. Объект с данными может быть доступен вашему веб-методу, когда служба запрашивается в первый раз, а также перезапускается любой рабочий процесс приложения.

//pseudo-code

class MyWebMethods {

  private static DataTable localDataTable;
  static MyWebMethods() {
    localDataTable = new DataTable();
    //Do whatever else is needed here to populate the table
  }

  [WebMethod]
  public string GetSomeData(int id) {
    //Query localDataTable using parameter info
    //return result
  }
}

Дешевый вариант # 2 : аналогичный подход, рассмотрим кэш ASP.Net (System.Web.Caching.Cache). Тот же процесс загрузки, что и выше, но другое хранилище.

1 голос
/ 30 декабря 2008

Вы можете хранить любые данные в памяти столько времени, сколько захотите, с помощью memcached . Он работает на Linux и Windows, и у них также есть несколько реализаций api с C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...