1

我有一个 Duplex 服务(Singleton),它曾经与 WSDualHttpBinding 一起使用,并且出于性能原因将其更改为 duplex CustomBinding 以支持 BinaryEncoding 后,它停止了工作。对于所有客户端请求,问题跟踪到 GetCallBackChannel 始终返回相同的 HashCode(在该服务实例内),并且列表认为它已经存在于订阅的频道中并且不会添加到订阅者列表中。我正在使用 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);
                }
            }
        }
4

1 回答 1

1

看起来这是 .Net 3.5 的未记录问题。在 .Net 4.0 中尝试了同样的事情,它就像一个魅力。

我的目标是使用带有 wsDualHTTPBinding 的二进制编码,因为当时 Windows Server 2008/IIS7 不是一个选项,因此引发了这个问题。

将二进制编码与双工绑定一起使用的首选解决方案是使用 nettcpbinding,它依赖于需要 IIS7(除非您是自托管),这仅在 windows server 2008 或更高版本上可用。

我们说服了我们的基础设施团队进行升级......现在一切都很好:)

于 2011-01-06T15:55:20.480 回答