【问题标题】:Integration of Azure Service Bus messages between C# and PHP在 C# 和 PHP 之间集成 Azure 服务总线消息
【发布时间】:2013-03-22 23:32:20
【问题描述】:

查看development notes from Microsoft for PHP Azure bus,我看到PHP 总线库有$message->getBody(),而C# 库有message.GetBody<T>(); 并需要一个类型。

我们如何以灵活的方式在 PHP/C# 之间发送消息(作为简单的类),即使收到更新的消息版本也不会中断?

【问题讨论】:

  • 您尝试了什么,什么没有奏效?您的问题没有显示任何尝试自行解决?去你问题的根源doesn't break should a newer message version be received我会说avoid using generic methods, but rather do the serialization/deserialization on your own
  • @astaykov 感谢您的回复,总线的样板代码是简单的部分,是的,我们可以发送消息 OK - 我的问题是这些消息应该是什么?我曾考虑过 JSON,但确实需要一些指导,因为我对 Azure PHP 到 C# 的了解可能很危险!此外,C# 方法似乎只接受 GetBody() 的泛型类型
  • 说到这……你是对的。只有 Generic GetBody,但也有重载 GetBody<T>(XmlObjectSerializer serializer),您可以使用它来注入您自己的 XmlObjectSerializer 实例。在这种情况下,您的 T 可能是一个非常简单的 .NET 对象,具有单个文本属性,即 JSON 有效负载。我认为这是在不更改队列逻辑的情况下处理多种消息格式的最佳方式。
  • Azure Java Service Bus SDK 是否也存在此问题?

标签: azure integration servicebus


【解决方案1】:

我的猜测是基于 php 的代理消息的默认数据类型是字符串。根据您发送的内容,这里有几个选项:

  1. 使用 BrokeredMessage 上的键值对集合发送数据。 php:$message-&gt;setProperty("Key", "Value"); 或 c#:brokeredMessage.Properties.Add("Key","Value");
  2. 将所有对象序列化为 json,然后插入 BrokeredMessage 正文。如果在 C# 中检索,请使用 BrokeredMessage.GetBody&lt;string&gt;()

另一个提示是,在 C# 中,您只能调用 BrokeredMessage.GetBody() 一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多