2012-08-28 15 views
11

Con el SDK de Azure de junio de 2012, tengo un tema de bus de servicio y le agrego una suscripción.Cómo filtrar una suscripción al tema ServiceBus basada en una propiedad incorporada de la clase BrokeredMessage?

Quiero filtrar esa suscripción. Si hago esto sobre la base de uno de los artículos que he añadido a la bolsa BrokeredMessage Propiedades, a continuación, esto funciona bien:

// 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(); 

Sin embargo, si hago lo mismo, pero añade el valor de filtro a una de las propiedades directas del objeto BrokeredMessage, como SessionId, entonces esto falla:

// 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(); 

¿Cómo puedo construir un SqlFilter que se ocupará de la incorporada en las propiedades del objeto BrokeredMessage (sessionId o ReplyToSessionId o IdMensaje

?

¿Esto es posible?

Respuesta

18

Las expresiones de propiedad en los filtros SQL en realidad tienen prefijos de alcance. Por lo general, no los ve, porque el valor predeterminado es "usuario". para las propiedades definidas por el usuario. Puede obtener las propiedades del sistema prefijando con "sys".

Consulte la descripción de la sintaxis aquí; buscar 'alcance' http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.messaging.sqlfilter.sqlexpression.aspx

+0

Exactamente lo que estaba buscando. ¡Muchas gracias! – JcFx

Cuestiones relacionadas