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
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;
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
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...
Ich miente ja auch das du "SuppressFinalize" auf MSMQ anwendest, werweiß inwieweit die mit unmanaged Datentypen oder Pointern arbeiten.