Я знаю, что вы хотите объявить MessageID и UtcDateTime с частными установщиками, чтобы кто-то в дальнейшем не мог изменить его, но при этом вы не позволяете сериализатору повторно применять эти значения, когда сообщение восстанавливается в получателе. .
То, что происходит, заключается в том, что сериализатор создает новый экземпляр типа вашего сообщения, и ваши два свойства инициализируются в UtcNow и NewGuid (), а затем не переопределяются из сообщения. Вот почему они кажутся разными.
Если вы удалите ключевое слово private из объявления свойства, вы должны получить ожидаемое поведение.
Однако, вместо того, чтобы запекать свои собственные механизмы отслеживания, подобные этому, вы должны по крайней мере (при условии, что вы вставили IBus в ваш обработчик) взглянуть на Bus.CurrentMessageContext, который содержит свойство «Id» для обрабатываемого сообщения (строка, а не Guid) и коллекция заголовков. Я не уверен на 100%, но если вы проверяете заголовки, вероятно, есть какое-то указание на исходное время отправки.