2017-09-27 5 views
0

J'essaie de créer une règle de filtre dans un abonnement à un sujet de bus de service.Impossible d'ajouter la règle de filtre Abonnement au bus de service Azure

foreach(var reciver in recivers) 
     { 
      try 
      { 
       var client = SubscriptionClient.CreateFromConnectionString(ServiceBusConnectionString, reciver.TopicName, reciver.SubscriptionName); 

       string ruleName = "customRule2"; 
       client.RemoveRule(ruleName); 

       var filter = reciver.Reciver.GetFilter(); 
       var ruleDescription = new RuleDescription(ruleName, filter); 

       client.AddRule(ruleDescription); 
       client.RemoveRule("$Default"); 

       client.OnMessage((msg) => { 
        reciver.Reciver.Recive(msg); 
       });      
      } 
      catch(Exception ex) 
      { 

      } 
     } 

Exception devient de

client.AddRule(ruleDescription); 

J'ai essayé avec la suppression ligne suivante

client.RemoveRule(ruleName); 

et qu'il fonctionne correctement pour le temps poing. Mais une deuxième application s'exécute, elle reçoit une exception "L'entité de messagerie existe déjà"

Mais je dois supprimer la règle existante et ajouter la même règle lors du lancement de l'abonnement.

suivant est le message complet d'exception

Microsoft.ServiceBus.Messaging.MessagingException: Le service n'a pas pu traiter la demande; veuillez réessayer l'opération. Pour plus d'informations sur les types d'exception et la gestion des exceptions, reportez-vous à http://go.microsoft.com/fwlink/?LinkId=761101 TrackingId: a08300d4-9f59-4455-8519-5410198ba444_G16, SystemTracker: vp-servicebus-poc: Rubrique: test-topic2, Horodatage: 9/27/2017 9: 17:35 AM ---> System.ServiceModel.FaultException 1[System.ServiceModel.ExceptionDetail]: The service was unable to process the request; please retry the operation. For more information on exception types and proper exception handling, please refer to http://go.microsoft.com/fwlink/?LinkId=761101 TrackingId:a08300d4-9f59-4455-8519-5410198ba444_G16, SystemTracker:vp-servicebus-poc:Topic:test-topic2, Timestamp:9/27/2017 9:17:35 AM at Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.ThrowIfFaultMessage(Message wcfMessage) at Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.HandleMessageReceived(IAsyncResult result) --- End of stack trace from previous location where exception was thrown --- at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) at Microsoft.ServiceBus.Messaging.Sbmp.DuplexRequestBindingElement.DuplexRequestSessionChannel.EndRequest(IAsyncResult result) at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory 1.RequestSessionChannel.RequestAsyncResult. <> c.b__9_3 (RequestAsyncResult thisPtr, IAsyncResult r) à Microsoft.ServiceBus.Messaging.IteratorAsyncResult 1.StepCallback(IAsyncResult result) --- End of stack trace from previous location where exception was thrown --- at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) at Microsoft.ServiceBus.Common.AsyncResult 1.End (IAsyncResult asyncResult) 1.RequestSessionChannel.EndRequest(IAsyncResult result) at Microsoft.ServiceBus.Messaging.Sbmp.RedirectBindingElement.RedirectContainerChannelFactory à Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory 1.RedirectContainerSessionChannel.RequestAsyncResult. <> c__DisplayClass8_1.b__4 (RequestAsyncResult thisPtr, IAsyncResult r) à Microsoft.ServiceBus.Messaging.IteratorAsyncResult 1.StepCallback(IAsyncResult result) --- End of stack trace from previous location where exception was thrown --- at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) at Microsoft.ServiceBus.Common.AsyncResult 1.End (IAsyncResult asyncResult) à Microsoft.ServiceBus.Messaging.Sbmp.RedirectBindingElement.RedirectContainerChannelFactory 1.RedirectContainerSessionChannel.EndRequest(IAsyncResult result) at Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory 1.RequestSessionChannel.RequestAsyncResult. <> c.b__9_3 (RequestAsyncResult thisPtr, IAsyncResult r) à Microsoft.ServiceBus.Messaging.IteratorAsyncResult 1.StepCallback(IAsyncResult result) --- End of stack trace from previous location where exception was thrown --- at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) at Microsoft.ServiceBus.Common.AsyncResult 1.End (IAsyncResult asyncResult) à Microsoft.ServiceBus.Messaging.Channels.ReconnectBindingElement.ReconnectChannelFactory 1.RequestSessionChannel.EndRequest(IAsyncResult result) at Microsoft.ServiceBus.Messaging.Sbmp.SbmpTransactionalAsyncResult 1. <> c.b__18_3 (TIteratorAsyncResult thisPtr, IAsyncResult a) à Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback (résultat IAsyncResult) --- Fin de trace de la pile à partir de l'emplacement précédent où exception a été levée --- à Microsoft.ServiceBus.Common. AsyncResult.End [TAsyncResult] (résultat IAsyncResult) at Microsoft.ServiceBus.Messaging.Sbmp.SbmpSubscriptionClient.OnEndAddRule (résultat IAsyncResult) --- Fin de l'ex interne ception pile trace --- à Microsoft.ServiceBus.Messaging.Sbmp.SbmpSubscriptionClient.OnEndAddRule (résultat IAsyncResult) à Microsoft.ServiceBus.Messaging.SubscriptionClient.AddRule (description du RuleDescription) à ServiceBusReciver.ServiceBusReciverBuilder.InitRecivers() à G: \ Documents \ Visual studio 2015 \ Projects \ ServiceBusReciver \ ServiceBusReciver \ ServiceBusReciverBuilder.cs: ligne 42

Répondre

0

Il y avait un problème dans la version WindowsAzure.ServiceBus.dll. J'ai rétrogradé la version de WindowsAzure.ServiceBus.dll de 4.1.3 à 4.1.2 cela fonctionne parfaitement.

EDIT: Cette question devient à nouveau

+0

Je viens d'essayer avec 4.1.3 et cela a fonctionné pour moi aussi ... – Mikhail

+0

Essayez un code plus simple repro où vous auriez une séquence d'opérations w/o une boucle. Comme points d'arrêt et inspectez vos entités. –

+0

Ici, je crée dynamiquement plusieurs abonnés et j'ajoute dynamiquement la règle de filtrage avec la boucle foreach. Parfois, cela fonctionne bien. Mais parfois, obtenir cette erreur. C'est un problème sporadique. –