Feel Good.
Показаны сообщения с ярлыком WCF. Показать все сообщения
Показаны сообщения с ярлыком WCF. Показать все сообщения

10 марта 2011

Caching в WCF сервисе

Кэширование данных неотъемлемая часть высоконагруженных и ресурсоемких проектов. В этой статье я опишу процесс организации оптимального механизма кэширования в WCF сервисе. Сформулирую задачу: имея WCF сервис, нужно организовать кеширование результатов работы любого сервис-метода в зависимости от входных параметров (Caching Support for WCF Services). Существует множество решений поставленной задачи, и самое простое и очевидное, это организовать кэширование прямо в сервис-методе:

public DateTime GetDate()

{

    ICache cache = ...; // получим экземпляр кэша

 

    string key = "somekey";

    object value;

 

    // Попробуем достать данные из кэша

    if (!cache.TryGet(key, out value))

    {

        // Данные в кэше отсутствуют,

        // получим новые данные

        value = DateTime.Now;

        // и поместим их в кэш на 5 секунд

        cache.Add(key, value, TimeSpan.FromSeconds(5));

    }

    return (DateTime)value;

}


Из примера видно, что сервис-метод GetDate перегружен логикой кэширования, и с появлением еще одного аналогичного сервис-метода, логика кэширования будет просто скопирована в него. Очевидно, что такой подход приведет к тому, что со временем такой код станет труднее поддерживать при изменении схемы кэширования, и естественно возникает вопрос об организации функционала сквозного кэширования. Организовать такую функциональность можно через AOP или в случае с WCF можно воспользоваться стандартным механизмом перехвата вызова через специальные интерфейсы (WCF Interceptor Interfaces), а точнее через интерфейс IOperationInvoker.
И, предже чем приступить к реализации наметим основные шаги:
  1. Для начала создадим простой WCF сервис
  2. Объявим интерфейс кэша ICache
  3. Реализуем свой перехватчик (IOperationInvoker)
  4. И закончим реализацией IOperationBehavior атрибута для нашего перехватчика

20 января 2011

IoC/DI в WCF на примере Unity 2.0

В этой статье я продемонстрирую процесс внедрения IoC/DI контейнера (на примере Unity 2.0) в WCF сервис. В примере я выбрал Unity 2.0, но на самом деле это не существенно, и по желанию можно легко адаптировать код под другой IoC/DI контейнер. Для тех кто не знаком еще с данным контейнером, рекомендую глянуть вводную статью. Существуют несколько путей внедрения IoC/DI контейнера в WCF сервис, рассмотрим один из них*.
Итак, предже чем приступить к реализации наметим основные шаги:
  1. Для начала создадим простой WCF сервис
  2. Реализуем свой IInstanceProvider
  3. Далее опишем собственную реализацию IServiceBehavior
  4. Определим BehaviorExtensionElement
  5. И закончим, добавив необходимые настройки в web.config
*На самом деле это не единственный способ внедрения контейнера, существуют варианты с использованием ServiceHostBase и ServiceHostFactoryBase

05 апреля 2010

Аутентификация. WCF

Аутентификация клиента на стороне WCF сервиса - одна из важнейших задач при разворачивании безопасности на WCF сервисе, позволяющая ответить на главный вопрос "КТО?". В этой статье я расскажу, как я реализовывал аутентификацию клиента на стороне WCF сервиса. Наша конечная цель: развернуть WCF сервис, реализующий интерфейс ISecretService, содержащий метод GetSecretCode, доступ к которому разрешен только аутентифицированным клиентам.