1

以前は WSDualHttpBinding で動作していた Duplex サービス (Singleton) があり、パフォーマンス上の理由から BinaryEncoding をサポートするために duplex CustomBinding に変更した後、動作しなくなりました。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 で Binary Encoding を使用することでした。これは、この問題が提起された時点で Windows Server 2008/IIS7 がオプションではなかったためです。

二重バインディングでバイナリ エンコーディングを使用するための推奨される解決策は、nettcpbinding を使用することです。これには、Windows Server 2008 以降でのみ使用可能な IIS7 (セルフ ホスティングでない限り) が必要であるという依存関係があります。

私たちは、インフラストラクチャ グループにアップグレードするよう説得しました..そして、すべてがうまくいきました:)

于 2011-01-06T15:55:20.480 に答える