死信队列中的服务总线克隆不起作用

问题描述

我正在尝试从服务总线死信队列中提取一条消息,将其克隆并将其发送回原始队列。我正在使用克隆方法,然后在使用SendAsync将其发送回之前,从用户属性删除死信原因。

我注意到了两个问题-当我从新的克隆消息中删除属性时,这些属性也将从原始消息中删除。另外,当我使用SendAsync方法时,我永远都看不到新消息。

任何帮助将不胜感激。

            string fullPath = EntityNameHelper.FormatSubscriptionPath(TopicName,subscriptionName);
            var deadLetterClient = new MessageReceiver(ServiceBusConnectionString,fullDeadLetterPath);
            var client = new MessageSender(ServiceBusConnectionString,fullPath);

            var messages = deadLetterClient.ReceiveAsync(1).Result;
            if (messages.Any())
            {
                var message = messages.First();
                var newMessage = message.Clone();
                newMessage.UserProperties.Remove("DeadLetterReason");
                newMessage.UserProperties.Remove("DeadLetterErrorDescription");

                client.SendAsync(newMessage);
            }

解决方法

newMessage.UserProperties == message.UserProperties产生true。显然,clone方法存在某种类型的错误,它没有进行深度克隆。

这时我最好的猜测是,我将不得不手动创建消息对象的新副本,而不是依赖克隆操作。