Я начну с того, что скажу: «Я новичок в 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 так, чтобы статическая память не распределялась между вызовами служб.
Любая помощь будет принята с благодарностью.