Подскажите про правильное завершение работы каналов в WCF
От: maxidroms Россия  
Дата: 25.04.09 15:54
Оценка:
Есть сервер и клиент.
Используется для соединения след. настройки:
NetTcpBinding(SecurityMode.None, true);
tcp.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
tcp.Security.Transport.ProtectionLevel = ProtectionLevel.None;

Интерфейс-контракт сервера описан так:

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(ISecretaryService))]
public interface IBossService
......

Его реализация:
[ServiceBehavior( IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class BossService : IBossService
.....

как видно это синглетон.

Реализация интерфейса клиента так :
[CallbackBehavior(IncludeExceptionDetailInFaults = true)]
public class SecretaryService : ISecretaryService
...


По сути сервер запускается и ожидает метод Join(User user) ---> [OperationContract(IsInitiating = true, IsTerminating = false, IsOneWay = false)]
На сервере объект User добавляется в коллекцию подключенных пользователей у которых я так же запоминаю user.SecretaryCallbackService = OperationContext.Current.GetCallbackChannel<ISecretaryService>();

скажите в каком порядке надо подписываться, обрабатывать и на какие вообще надо подписываться события? ведь есть и ServiceHost и ServiceEndPoint и (IChannel)BossService.. у всех есть события closed, faulted и т.д.

аналогично и на другой стороне — есть DuplexChannelFactory, есть InstanceContext, есть (IChannel)ISecretaryService и т.д.

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

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

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.