Ich habe ein Problem bei der Kennzeichnung meiner BrokeredMessage als Complete.BrokeredMessage entsorgt
Einfache Code, der wie funktioniert erwartet:
private void OnMessageArrived(BrokeredMessage message)
{
var myObj= message.GetBody<MyObject>();
//do things with myObj
message.Complete();
}
Wenn ich versuche, für Benutzer zu warten mit myObj zu beenden ich Ausnahme:
brokeredmessage wurde angeordnet
Code unten:
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);
}
Für mich sieht es aus wie ServiceBus irgendwie Verbindung zum eigentlichen Objekt in C# Objekt
Etwas ähnliches wie freistehendes Objekt in EF, nur in diesem Fall verlieren wird losgelöst von ServiceBus
EDIT:
Es ist mir wichtig, Nachricht als abgeschlossen nur nach Benutzer klicken Sie auf Schaltfläche. Wenn AC runter geht (oder ähnliche Dinge) Ich möchte Nachrichten bleiben auf Service Bus Thema, so dass das nächste Mal Benutzer starten App wird er wieder Nachrichten erhalten, die er nicht verarbeitet hat.
Können Sie eine Lösung für diesen Problemfall dann empfehlen: 1. Nachricht empfangen, ihre Daten in Stücke gebrochen und an asynchrone Verarbeitung gesendet. Wir möchten die Nachricht sperren, bis ihre Daten von dem Benutzer verarbeitet wurden, der sie erworben hat. 2. Wenn eine Ausnahme auftritt oder der Benutzer das Programm beendet, entsperren Sie die Nachricht, damit ein anderer Benutzer sie später bearbeiten kann. 3. Wenn/wenn das letzte Datenelement verarbeitet wird, entfernen Sie die Nachricht vom ServiceBus Daten wurden ordnungsgemäß verarbeitet. – ErroneousFatality
Ja. Sie deaktivieren Complete() für die Nachricht, bis Sie fertig sind. –
Entschuldigung, wenn ich falsch liege, aber genau das macht OP. Er speichert die Nachricht in einem Wörterbuch, damit er nach Abschluss der asynchronen Verarbeitung Complete aufrufen kann. Sie haben empfohlen, dies nicht zu tun und nur die Daten zu speichern, die er verarbeitet. Wie würde er dann nach dem Async-Prozess die Nachricht "Complete" aufrufen? – ErroneousFatality