Проблемы с одноэлементным шаблоном внутри метода службы WCF

Я начну с того, что скажу: «Я новичок в WCF.

Я работаю над процедурой на стороне сервера, которая отвечает за большую часть бизнеса. логика. Он доступен с клиента через WCF.

Мой основной метод WCF вызывает несколько других частных методов. Вместо того, чтобы передавать все «данные поиска», необходимые для бизнес-логики, каждому частному методу, я решил использовать одноэлементный экземпляр класса с именем DataProvider, который содержит все эти «данные поиска».

В конце подпрограммы, я "освобождаю" данные поиска DataProvider, поэтому при следующем выполнении подпрограммы будут использоваться самые последние данные поиска.

Итак, вот упрощенный пример:

 public void Generate()
 {
      try
      {
           //populate singleton DataProvider with it's lookup data...
           DataProvider.Instance.LoadLookupData();

           //do business logic...
      }
      finally
      {
           //release provider's lookup data...
           DataProvider.Release();
      }
 }

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

Итак ...

Какие у меня здесь варианты?

Я бы хотел избежать передачи всех данных поиска, поэтому шаблон singleton (или его производная) кажется хорошим выбором. Мне также нужно иметь возможность поддерживать несколько клиентов, вызывающих метод одновременно.

Я считаю, что служба WCF настроена как «Per-Call». Я не уверен, есть ли способ настроить службу WCF так, чтобы статическая память не распределялась между вызовами служб.

Любая помощь будет принята с благодарностью.

8
задан John Russell 1 August 2011 в 12:15
поделиться