Laden...

Message that the cursor is currently pointing to has been removed from the queue by another process

Erstellt von kugelschreiber vor 10 Jahren Letzter Beitrag vor 10 Jahren 849 Views
K
kugelschreiber Themenstarter:in
6 Beiträge seit 2012
vor 10 Jahren
Message that the cursor is currently pointing to has been removed from the queue by another process

Hallo Ihr Lieben,

also wir haben einen Dienst, welcher XML Nachrichten per Stream entgegen nimmt und diesen als String in eine MSMQ (non transactional) packt/schreibt. Der Dienst selber ist ein Listener auf ein Socket und verwendet die TCPCom Klasse zum empfangen der Nachrichten. Das Listening wird für die Zeit der Verarbeitung unterbrochen/gestoppt. Dies klappt soweit ganz gut. Jedoch haben wir ab und an den Fall, dass wir die Nachricht NICHT in die MSMQ schreiben können auf Grund des o.g. Fehlers.

Die Nachrichten werden von einer weiteren Applikation aus der MSMQ
wieder ausgelesen. Nun die eigentliche Frage. Wie kann es sein, dass der sogenannte 'Cursor' entfernt werden kann?

Ich habe zwar ein Dokument (Message Queuing Frequently Asked Questions) gefunden, jedoch geht es dabei um die Methode ReceiveByCorrelationID. Jedoch verwende ich diese Methode nicht.

Habt Ihr irgendwelche Erfahrungen damit?

Gruß und vielen Dank

Kuli

R
212 Beiträge seit 2012
vor 10 Jahren

Ich kann auch nur was vermuten, aber es könnte sein das dein pointer z.B von GC(GarbageCollector)entferrnt wurde du kannst den GC explizit sagen dass bestimmte objekte nicht freigegeben werden sollen.

Versuch mal bevor du dein prozess unterbrichst


GC.SuppressFinalize(object obj); 

auf dein objekt anzuwenden.
Jedoch, wenn du dein object mit


GC.ReRegisterForFinalize(object obj); 

nicht wider freigibst blokiert es bis du den PC herrunterfährst den arbeitsspeicher.

ED1IT:
System.GC --> use System;

K
kugelschreiber Themenstarter:in
6 Beiträge seit 2012
vor 10 Jahren

Hallo Robin

Die Exception wird aber als MessageQueueException geworfen. Daher vermute ich mal, es hat was mit dem Cursoer beim Schreiben in die MSMQ zu tun, anstelle eines Pointers, oder?

Gruß Kuli

4.221 Beiträge seit 2005
vor 10 Jahren

Mach doch eine Transaction...

ev. versucht eine andere App den Eintrag schon zu lesen/verarbeiten/entfernen bevor Du den fertig reingestellt hast.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

R
212 Beiträge seit 2012
vor 10 Jahren

Ich miente ja auch das du "SuppressFinalize" auf MSMQ anwendest, werweiß inwieweit die mit unmanaged Datentypen oder Pointern arbeiten.