Я отправляю сообщение 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, данные массива байтов считываются нулевыми.