Мое приложение использует локальный приватный MessageQueue(@".\private$\queuename")
для упорядочения сообщений из нескольких потоков, и оно успешно делает это в течение длительного времени.Недавно произошла ошибка, из-за которой некоторые из этих сообщений практически исчезли без следа.Судя по внутреннему журналу приложения и учетной записи очевидца, метод Send(msg)
не смог поместить сообщение в очередь и не вызвал ошибок.В отладчике я смоделировал этот сценарий, заставив выполнение пропустить вызов Send()
, и полученная информация журнала соответствует тому, что было зарегистрировано в фактическом возникновении ошибки.
Самое неприятное, что условие ошибки существовало в течение 45 минут, сохраняющийся после перезагрузки компьютера и перезапуска приложения, и потребовал второй перезагрузки после перезагрузки, чтобы окончательно очистить его.
Этот неразрешенный пост [^] намекает на то, что сообщение может оказаться в каком-то местекроме предполагаемой локальной очереди.К сожалению, все свидетельства того, что могло существовать, исчезли к тому времени, когда я смог осмотреть систему, в которой произошла ошибка.Я решил использовать подтверждение TimeToReachQueue
для обнаружения сбоя вызова Send()
, но MSDN здесь [^] утверждает, что «если очередь локальная, сообщение всегда достигает очереди», хотя это событиевызовы, которые требуют.
Повторение этой ошибки будет серьезной проблемой, поэтому, если я не могу предотвратить ее, мне нужно иметь возможность обнаружить и сообщить об этом.Незнание того, что на самом деле произошло, делает оба варианта чрезвычайно трудными.