Отслеживание клиентов в контексте WCF WSDualHttpBinding

#c# #wcf #wcf-binding

#c# #wcf #wcf-привязка

Вопрос:

Я использую WSDualHttpBinding в службе wcf и использую следующий код для хранения клиентских каналов:

     public static void Subscribe()
    {
        try
        {
            // Subscribe the guest to the beer inventory
            var guest = OperationContext.Current.GetCallbackChannel<ILoggingServiceCallBack>();

            if (!CallbackList.Contains(guest))
            {
                CallbackList.Add(guest);
            }
        }
        catch (Exception ex)
        {
            //do stuff
        }
        finally
        {
           //do stuff
        }

    }
  

и я перезваниваю клиентам подобным образом:

         public static void LoggingCallBack(Action<ILoggingServiceCallBack> callbackNotification)
    {
        try
        {
            if (OperationContext.Current != null)
            {
                var guest = OperationContext.Current.GetCallbackChannel<ILoggingServiceCallBack>();
                if (!CallbackList.Contains(guest))
                {
                    CallbackList.Add(guest);
                }
            }

            foreach (var LoggingCallBack in CallbackList)
            {

       var temp = LoggingCallBack;
                try
                {
                    new Thread(() =>
                    {
                        try
                        {
                            callbackNotification(temp);
                        }
                        catch (Exception ex)
                        {
                            //do something
                        }
                    }).Start();


                }
                catch (Exception ex)
                {
                    //do somethin
                }
            }
        }
        catch (Exception ex)
        {
            //doing something
        }
        finally
        {
         //doing something
        }
    }
  

у меня возникли некоторые проблемы:

  1. у меня нет способа определить, подключен ли клиент к сети или нет, прежде чем я перезвоню ему.
  2. мне нужно иметь возможность удалять клиента после отсутствия активности из списка, я думаю, я смог бы это сделать, если бы достиг номера 1.
  3. каков наилучший способ идентификации клиентов, другими словами, с помощью какого наилучшего уникального идентификатора я могу идентифицировать клиента?
  4. если соединение с клиентом сбилось, я не знаю, как это обнаружить и запустить новое с клиента, как если бы я пытался это сделать, он отказывается, и он выдает исключение, что соединение сбито.

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

Комментарии:

1. Пункт 4 — ужасно сложный бизнес!

2. Самый простой способ — просто перехватывать исключения, если что-то пойдет не так, и открывать новое соединение.