В моем сервисе WCF используются обратные вызовы. Чтобы позвонить всем клиентам, я использую что-то вроде этого:Как сохранить все подключения к службе WCF?
[ServiceBehavior (InstanceContextMode = InstanceContextMode.PerSession)]
class Svc
{
// stores all connections
private static List<Svc> Connections = new List<Svc>();
// callback for this instance
private ICallback Cb;
public Svc()
{
Cb = OperationContext.Current.GetCallbackChannel<ICallback>();
Connections.Add (this);
}
// ... lots of other code that uses or updates the list of connections
}
Это правильный способ сделать это?
Я спрашиваю, потому что я борюсь с очевидной проблемой дизайна в вышеупомянутом подходе. Я попытался переместить много общего кода, включая static List<Svc>
, в общий базовый класс, который может использоваться всеми моими WCF-сервисами. Но при выводе этот список используется для всех подклассов.
Я попытался избежать этого нежелательного совместного использования, создав базовый класс generic (Svc<T>
, что означает, что каждый подкласс получает свои собственные статические элементы), но это приводит к другим неприятностям и не является чистым дизайном.
К сожалению, я не понимаю, как это помогает в любом путь? Проблема с общими переменными не решена. И сервис не может быть singleton для начала (`PerSession`). – mafu 2010-12-16 13:15:01