我正在尝试组装一个简单的AppFabric主题,使用SessionId发送和接收消息。代码不会中止,但brokeredMessage始终为null。这是代码:
// 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)
您的代码中存在两个问题:
您创建了发送邮件的订阅 AFTER 。您需要在发送之前创建订阅,因为订阅会告诉主题在某种意义上将消息复制到几个不同的“桶”。
您正在使用TryReceive但未检查其结果。如果收到消息,则返回true;否则返回false(例如,已发生超时)。
我正在编写我的示例应用程序,并将在今天的博客上发布。我也会在这里发布链接。但是在那之前,在发送消息之前将订阅逻辑移动到接收消息之后,接收器将会开始看到结果。
<强>更新强> 正如所承诺的,这是getting started with AppFabric Queues, Topics, Subscriptions.
上我的博客文章的链接