2012-08-28 7 views
11

Mit dem Azure SDK vom Juni 2012 habe ich ein Servicebus-Thema, dem ich ein Abonnement hinzufüge.Wie Filtern einer ServiceBus-Thema-Subskription basierend auf einer integrierten Eigenschaft der BrokeredMessage-Klasse?

Ich möchte dieses Abonnement filtern. Wenn ich dies tun auf der Grundlage eines der Elemente, die ich in den BrokeredMessage Eigenschaften Tasche hinzugefügt haben, dann funktioniert das gut:

// Send the message: 
BrokeredMessage message = new BrokeredMessage(serializableObject); 
message.Properties.Add("MySessionId", "GUID"); 
getTopicClient("MY_TOPIC").Send(message); // method creates client. omitted here. 

// Retrieve it: 
SqlFilter myFilter = new SqlFilter(@"(MySessionId = ""GUID"")"); 
namespaceManager.CreateSubscription("MY_TOPIC", "MY_SUB", myFilter); 
SubscriptionClient client = getSubscriptionClient("MY_TOPIC", "MY_SUB"); // method creates client. omitted here. 

// This will work fine: 
Message newMessage = client.Receive(); 

Wenn jedoch muss ich das gleiche, aber die Filterwert zu einem der hinzufügen direkte Eigenschaften des BrokeredMessage Objekt, wie SessionId, dann dies fehlschlägt:

// Send the message: 
BrokeredMessage message = new BrokeredMessage(serializableObject); 
message.SessionId = "GUID"; 
getTopicClient("MY_TOPIC").Send(message); // method creates client. omitted here. 

// Retrieve it: 
SqlFilter myFilter = new SqlFilter(@"(SessionId = ""GUID"")"); 
namespaceManager.CreateSubscription("MY_TOPIC", "MY_SUB", myFilter); 
SubscriptionClient client = getSubscriptionClient("MY_TOPIC", "MY_SUB"); // method creates client. omitted here. 

// This will never receive a message 
Message newMessage = client.Receive(); 

wie kann ich ein SqlFilter konstruieren, die die integrierten Eigenschaften des BrokeredMessage Objekt (SessionId oder ReplyToSessionId oder Meldungs ​​wird sich

?

Ist das überhaupt möglich?

Antwort

18

Die Eigenschaftsausdrücke in SQL-Filtern haben Scoping-Präfixe. Normalerweise werden sie nicht angezeigt, da der Standardwert "Benutzer" ist. für die benutzerdefinierten Eigenschaften. Sie können die Systemeigenschaften erreichen, indem Sie "sys" voranstellen.

Siehe Syntaxbeschreibung hier; Suche nach 'scope' http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.messaging.sqlfilter.sqlexpression.aspx

+0

Genau das, was ich gesucht habe. Danke vielmals! – JcFx

Verwandte Themen