Сообщение Azure ServiceBus из ядра .net не анализируется в .net 4.6.1 - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть ServiceBus в Azure и несколько очередей. У меня есть одна служба, написанная в .net core , которая отправляет данные в очередь следующим образом:

queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
string example = "Hello World!";
var message = new Message(Encoding.UTF8.GetBytes(example));
await queueClient.SendAsync(message);

Другая служба, написанная на .net framework 4.6.1, прослушивает эту же очередь следующим образом:

queueClient.OnMessage(ProcessQMessage);
private void ProcessQMessage (BrokeredMessage receivedMessage) {
    var tmpBytes = receivedMessage.GetBody<byte[]>();
    ...
}

По какой-то причине я получил исключение из receiveMessage.GetBody (). Я получаю то же исключение, пытаясь разобрать его в string и object :

Произошла ошибка десериализации объекта типа System.Byte []. Источник входного сигнала отформатирован неправильно.

Я понимаю, что проблема в том, что ядро ​​и фреймворк работают немного по-разному. Не ожидал, что это будет проблемой.

1 Ответ

0 голосов
/ 15 ноября 2018

enter image description here

Если системы работают со старым клиентом, вы, вероятно, застряли с XmlObjectSerializer (сериализатором контракта данных), как наш .netfull клиент. Но вещи не будут сломаны. Пример кода, как показано ниже, это именно то, что происходит под клиентом .netfull.

var bytes = your bytes;
var serializer = DataContractBinarySerializer<byte[]>.Instance;
using (MemoryStream stream = new MemoryStream())
{
    serializer.WriteObject(stream, bytes);
    var msg = new Message(stream.ToArray());
    var client = new Microsoft.Azure.ServiceBus.QueueClient(ConnectionString, Queue);
    await client.SendAsync(msg);
    await client.CloseAsync();
}

Для получения более подробной информации, вы можете обратиться к этой статье и этой проблеме .

...