我有一个双工服务(单例),它曾经与WSDualHttpBinding一起工作,出于性能原因将其改为双工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);
}
}
}发布于 2011-01-06 23:55:20
看起来这是.Net 3.5的一个未记录的问题。在.Net 4.0中也做了同样的事情,效果很不错。
我的目标是在wsDualHTTPBinding中使用二进制编码,因为在这个问题提出的时候,Windows Server2008/IIS7还不是一个选项。
使用二进制编码和双工绑定的首选解决方案是使用nettcpbinding,它依赖于IIS7 (除非你是自托管的),这种依赖仅在windows server 2008或更高版本上可用。
我们说服了我们的基础设施团队进行升级..现在一切都好了:)
https://stackoverflow.com/questions/3839311
复制相似问题