我在編輯BrokeredMessage時遇到了麻煩。BrokeredMessage配置
簡單的代碼,就像預期:
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掉電(或類似事件),我希望消息仍然保留在服務總線主題,以便下次用戶啓動應用程序時,他將再次收到他未處理的消息。
你能否推薦一個解決這個問題的案例: 1.收到的消息,它的數據被分解併發送到異步處理。我們希望鎖定該消息,直到其數據由獲取它的用戶處理。 2.如果發生異常或用戶退出程序,解鎖消息,以便其他用戶稍後可以處理它 3.如果/當處理最後一條數據時,請從ServiceBus中刪除消息,因爲它的數據正確處理。 – ErroneousFatality
是的。您不要在消息中調用Complete(),直到完成。 –
對不起,如果我錯了,但這正是OP正在做的。他將消息保存在字典中,以便在異步處理結束後可以調用Complete。 你建議他不要那樣做,只保存他正在處理的數據。那麼他會如何在異步過程之後調用完成消息? – ErroneousFatality