2011-06-26 200 views
2

我正試圖組裝一個簡單的AppFabric主題,由此使用SessionId發送和接收消息。代碼不會中止,但是brokeredMessage始終爲空。下面是代碼:AppFabric主題訂閱

// BTW, the topic already exists 

var messagingFactory = MessagingFactory.Create(uri, credentials); 
var topicClient = messagingFactory.CreateTopicClient(topicName); 
var sender = topicClient.CreateSender(); 
var message = BrokeredMessage.CreateMessage("Top of the day!"); 
message.SessionId = "1"; 
sender.Send(message); 

var subscription = topic.AddSubscription("1", new SubscriptionDescription { RequiresSession = true}); 
var mikeSubscriptionClient = messagingFactory.CreateSubscriptionClient(subscription); 
var receiver = mikeSubscriptionClient.AcceptSessionReceiver("1"); 
BrokeredMessage brokeredMessage; 
receiver.TryReceive(TimeSpan.FromMinutes(1), out brokeredMessage); // brokeredMessage always null 
+0

它是否回答你的問題? –

回答

3

你在你的代碼的兩個問題:

  1. 創建您發送郵件訂閱。您需要在發送之前創建一個訂閱,因爲訂閱會將該主題從某種意義上講,將該消息複製到多個不同的「存儲桶」中。

  2. 您正在使用TryReceive,但未檢查其結果。如果收到消息,則返回true,否則返回false(例如發生超時)。

我在寫我的示例應用程序,並將其發佈到我們的博客今天。我也會在這裏發佈鏈接。但在此之前,將訂閱邏輯移至發送消息之前,接收方之後再開始查看結果。

更新: 作爲承諾,這裏是鏈接到我的博客文章上getting started with AppFabric Queues, Topics, Subscriptions.