Я пойду вперед и скажу: я немного новичок в 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 до завершения другого.
Итак ...
Какие у меня есть варианты?
Я бы хотел избежать передачи всех данных поиска, чтобы шаблон синглтона (или некоторая производная) казался хорошим выбором. Мне также нужно иметь возможность поддерживать несколько клиентов, вызывающих метод одновременно.
Я считаю, что служба WCF настроена как "Per-Call". Я не уверен, есть ли способ настроить службу WCF, чтобы статическая память не распределялась между вызовами службы.
Любая помощь будет оценена.