Мой сервис 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.Но при выводе этот список используется всеми подклассами.
Затем я попытался избежать этого нежелательного разделения, сделав базовый класс универсальным (Svc<T>
, то есть каждый подкласс получает свои статические члены), но это приводит кдругие неприятности и не чистый дизайн.