Отслеживание клиентов в контексте WCF wsDualHttpBinding - PullRequest
1 голос
/ 18 октября 2011

Я использую 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. если соединение с клиентом оборвалось, я не знаю, как обнаружить это и начать новый с клиента, как будто я пытался сделать, что он отказывается, и это выдает исключение, что соединение разорвано.

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

...