我无法将我的BrokeredMessage标记为 Complete。
像预期一样工作的简单代码:
private void OnMessageArrived(BrokeredMessage message)
{
var myObj= message.GetBody<MyObject>();
//do things with myObj
message.Complete();
}
当我尝试等待用户完成myObj时,出现异常:
brokeredmessage已被处理
下面的代码:
private Dictionary<long, BrokeredMessage> ReceivedMessages;
ReceivedMessages = new Dictionary<long, BrokeredMessage>();
private void OnMessageArrived(BrokeredMessage message)
{
var myObj= message.GetBody<MyObject>();
ReceivedMessages.Add(myObj.Id, message);
//do things with myObj
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// get myObj on which user clicked
ReceivedMessages[myObj.Id].Complete();
ReceivedMessages.Remove(myObj.Id);
}
对我来说, ServiceBus似乎以某种方式失去了与c#中实际对象的连接
类似于EF中的分离对象,只是在这种情况下,对象与ServiceBus分离
编辑:
只有在用户单击按钮后才将消息标记为完成对我来说很重要。如果 AC 出现故障(或类似情况),我希望消息仍保留在服务总线主题上,以便下次用户启动应用程序时,他将再次收到他未处理的消息。