WCF CustomBinding + Duplex + BinaryEncoding + Нет безопасности Не удается перезвонить - PullRequest
1 голос
/ 01 октября 2010

У меня есть дуплексная служба (Singleton), которая раньше работала с WSDualHttpBinding, и после изменения ее на дуплексную CustomBinding для поддержки BinaryEncoding по соображениям производительности она перестала работать.Трассировки проблемы в GetCallBackChannel всегда возвращаются с одним и тем же HashCode (в этом экземпляре службы) для всех клиентских запросов, и List считает, что он уже существует в подписанных каналах и не будет добавлен в список подписчиков.Я использую C # 3.5

Пожалуйста, предложите решение ..

Заранее спасибо ...

public void Subscribe(string topicName)
            {
                try
                {
                    Notifier.IPublishing subscriber = OperationContext.Current.GetCallbackChannel<IPublishing>();
                    Notifications.Filter.AddSubscriber(topicName, subscriber);
                }
                catch (Exception ex)
                {
                    ErrorLog.WriteToLog("Subscribe\n" + ex.ToString());
                }
            }

static public void AddSubscriber(String topicName, IPublishing subscriberCallbackReference)
        {
            lock (typeof(Filter))
            {                
                if (SubscribersList.ContainsKey(topicName))
                {
                    if (!SubscribersList[topicName].Contains(subscriberCallbackReference))
                    {
                        SubscribersList[topicName].Add(subscriberCallbackReference);
                    }
                }
                else
                {
                    List<IPublishing> newSubscribersList = new List<IPublishing>();
                    newSubscribersList.Add(subscriberCallbackReference);
                    SubscribersList.Add(topicName, newSubscribersList);
                }
            }
        }

1 Ответ

1 голос
/ 06 января 2011

Похоже, это недокументированная проблема с .Net 3.5.Пробовал то же самое в .Net 4.0, он работает как чудо.

Моя цель состояла в том, чтобы использовать двоичное кодирование с wsDualHTTPBinding, потому что Windows Server 2008 / IIS7 не был вариантом в то время, когда эта проблема былаподнял.

Предпочтительным решением для использования двоичного кодирования с дуплексным связыванием является использование nettcpbinding, и он зависит от того, требуется ли IIS7 (если вы не являетесь хостом), который доступен только на Windows Server 2008 или более поздней версии.

Мы убедили нашу инфраструктурную группу в обновлении .. и теперь все хорошо :)

...