Можно ли создать одноэлементный WCF, который поддерживает память только для сеанса пользователя? - PullRequest
0 голосов
/ 09 ноября 2011

Я хотел создать WCF, который использует шаблон синглтона, но сама служба не будет использовать ту же память, что и другие пользователи?

мой WCF ServiceBehavior в настоящее время настроен на это:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

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

Я мог бы сделать PerCall, но я бы изменил много кода :( Надеюсь, у меня еще есть шанс на мой код.

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

Singleton = любое приватное поле в классе является общим для всех вызовов к классу.Если вы хотите иметь единую службу, но отдельные данные для каждого пользователя, вы должны хранить данные в другом месте (не в экземпляре службы) - например, в базе данных и загружать их для каждого вызова пользователя.

Служба Singleton должна бытьиспользуется в очень редких случаях.В большинстве случаев использование единственного сервиса означает только неправильную архитектуру.

1 голос
/ 09 ноября 2011

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

если нет, просто удалите их

если да, попробуйте поработать, если вы можете поместить их в кеш (статический, динамический)

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

вот что я понял из многолетнего опыта

1) Услуги должны быть как можно без гражданства. Или просто подумайте, что они не имеют гражданства.

2) Для производительности они могут поддерживать два типа кэша

a) статический кеш (кеш, который только для чтения и остается таким же, пока обслуживает набор сервисов) в основном делается во время запуска услуг. например, ваш кэш рабочего процесса

b) Динамический кэш (который может обновляться время от времени), например, кэш авторизации

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