2010-10-01 23 views
1

J'ai un service Duplex (Singleton), qui fonctionnait avec WSDualHttpBinding, et après l'avoir changé en duplex CustomBinding pour supporter BinaryEncoding pour des raisons de performances, il a cessé de fonctionner. Les traces de problème vers GetCallBackChannel retournent toujours avec le même HashCode (dans cette instance de service) pour toutes les demandes de client et la List pense qu'il existe déjà dans les canaux souscrits et ne les ajoutera pas à la liste des Abonnés. J'utilise C# 3.5WCF CustomBinding + Duplex + BinaryEncoding + Pas de sécurité Impossible de rappeler

S'il vous plaît suggérer une solution ..

Merci à l'avance ...

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); 
       } 
      } 
     } 

Répondre

1

ressemble à ceci est un problème avec .Net 3.5 Undocumented. Essayé la même chose dans. Net 4.0 cela fonctionne comme un charme.

Mon objectif était d'utiliser le codage binaire avec wsDualHTTPBinding, car Windows Server 2008/IIS7 n'était pas une option à ce moment-là. La solution préférée pour utiliser le codage binaire avec la liaison duplex est d'utiliser nettcpbinding, et il a une dépendance à ce que IIS7 (sauf si vous êtes auto-hébergement) est nécessaire qui est uniquement disponible sur Windows Server 2008 ou plus tard.

Nous avons convaincu le groupe de notre infrastructure d'améliorer .. et tout est bon maintenant :)