MSQM отправляет сериализуемое сообщение со свойством байтового массива, используя двоичный форматер - PullRequest
0 голосов
/ 10 января 2019

Я отправляю сообщение MessageQueue со свойством байтового массива, но всегда получаю следующую ошибку:

Невозможно десериализовать сообщение, переданное в качестве аргумента. Не удается распознать формат сериализации. в System.Messaging.BinaryMessageFormatter.Read (Сообщение сообщения) в System.Messaging.Message.get_Body ()

Сериализуемый класс сообщений:

[Serializable]
public class EmailMessage
{
    public string SenderEmailAddress { get; set; }

    public string Recipients { get; set; }

    public string Subject { get; set; }

    public string Body { get; set; }

    public bool IsHtml { get; set; }

    public List<EmailMessageAttachment> Files { get; set; }
}

[Serializable]
public class EmailMessageAttachment
{
    public string Name { get; set; }

    public byte[] Data { get; set; }
}

Отправить:

public static void QueueMailMessage(EmailMessage emailMessage)
    {
        var messageQueuePath = ConfigurationManager.AppSettings["NotificationServiceMsqmPath"];
        var emailMessageQueue = new MessageQueue(messageQueuePath, QueueAccessMode.Send)
        {
            Formatter = new BinaryMessageFormatter()
        };
        var message = new Message(emailMessage) {TimeToBeReceived = new TimeSpan(0, 0, 30)};

        emailMessageQueue.Send(message, MessageQueueTransactionType.Single);
    }

Прием:

private static EmailMessage ReceiveQueueEmailMessage()
    {
        var emailMessageQueue = new MessageQueue(AppSettings.MessageQueuePath,
            QueueAccessMode.ReceiveAndAdmin)
        {
            Formatter = new BinaryMessageFormatter()
        };

        emailMessageQueue.MessageReadPropertyFilter.SetAll();

        var message = emailMessageQueue.Receive();
        var body = message?.Body;
        var emailMessage = (EmailMessage) body;

        if (emailMessage == null)
            throw new InvalidOperationException("Email message cannot be null.");

        return emailMessage;
    }

Когда я пытаюсь использовать сериализатор xml, данные массива байтов считываются нулевыми.

...