Невозможно десериализовать сообщение, возвращенное из очереди служебной шины Azure - PullRequest
0 голосов
/ 07 мая 2019

Я работаю в команде, которая пишет собственную систему управления обучением, которая должна отправлять уведомления по электронной почте при регистрации пользователя на онлайн-курсе.

Я написал тестовое консольное приложение для проверки очередейкопирование сообщений электронной почты в очередь служебной шины Azure, а затем получение и обработка сообщений.

Я создал объект электронной почты

[DataContract(Name = "Email", Namespace = "Email")]
[Serializable]
public class Email
{
    [DataMember]
    public string From { get; set; }

    [DataMember]
    public string To { get; set; }

    [DataMember]
    public string Subject { get; set; }

    [DataMember]
    public string Body { get; set; }
}

Я отправляю сообщение в очередь следующим образом: v

Email email = new Email
{
    From = "email@email.com",
    To = "email@email.com",
    Subject = "Testing Azure Service Bus Queue",
    Body = "The test was a success!"
};

BrokeredMessage message = new BrokeredMessage(email);

Console.WriteLine("Sending message to Azure");
SendToAzure sendClient = new SendToAzure();
try
{
     sendClient.Send(message);
}

public class SendToAzure
{
    public string ServiceBusConnectString = [Endpoint];
    public string QueueName = [Queue];

    public async Task Send(BrokeredMessage message)
    {
        QueueClient AzureClient = QueueClient.CreateFromConnectionString(ServiceBusConnectString, QueueName);
        await AzureClient.SendAsync(message);
    }
}

Сообщение правильно попадает в очередь.Я могу зайти в свою очередь служебной шины Azure и увидеть, что в очереди находится одно сообщение.

Ниже приведен мой код для получения сообщения и десериализации его в объект электронной почты:

public class ReadFromAzure
    {
        public string ServiceBusConnectString = [Endpoint];
        public string QueueName = [Queue];

    public void Receive()
    {
        QueueClient AzureClient = QueueClient.CreateFromConnectionString(ServiceBusConnectString, QueueName);
        while (true)
        {
            BrokeredMessage message = AzureClient.Receive();
            if (message != null)
            {
                var type = message.GetType();
                Email email = message.GetBody<Email>();
            }
        }
    }
}

Когда я вызываю функцию GetBody и пытаюсь десериализовать ее в объект электронной почты, я получаю следующую ошибку:

Ожидается элемент 'Email' из пространства имен 'Email' .. Обнаружен элемент сname 'BrokeredMessage', пространство имен 'http://schemas.microsoft.com/netservices/2011/06/servicebus'.

Кто-нибудь знает, что является причиной этой ошибки?

...