Azure 服务总线队列在 NodeJs 中向 .NET 客户端发送消息

Azure Service Bus Queue sending a message in NodeJs to .NET client

我正在从一个 C# worker 向队列发送一条消息,然后我在另一个 C# worker 上获取它并调用

string body = message.GetBody<string>();

这行得通,我稍后反序列化了 string/JSON 消息。

现在我正尝试以 JSON 消息的形式从 NodeJS 发送相同的消息。当我尝试接收它时

string body = message.GetBody<string>();

调用这个我得到一个异常,说输入的格式不正确。

我在 NodeJS 上的消息对象如下所示

{
  body: JSON.stringify(message)
}

有什么想法吗?

已修复!

默认情况下,.NET Azure 队列库使用 DataContractSerializer 和二进制 XmlDictionaryWriter 在使用时序列化字符串消息

new BrokeredMessage("my message");

所以你需要使用这个

new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes("my message")), true);

要使用 C# 阅读消息,您需要使用

string body = new StreamReader(message.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();

我也停止将 JSON.stringify 消息包装在一个对象中并将其直接传递给 sendQueueMessage。发送消息代码现在如下所示:

serviceBusService.sendQueueMessage('my_queue', JSON.stringify("my message"), function(error){});

JSON.stringify 输出 UTF8 字符串,因此它与 C# 代码完全兼容。