2013-04-01 69 views
1

通过development notes from Microsoft for PHP Azure bus,我看到PHP总线库有$message->getBody(),其中C#库有message.GetBody<T>();,并且期望有一个类型。在C#和PHP之间集成Azure服务总线消息

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

+0

你尝试了什么,什么不起作用?您的问题没有显示任何尝试自行解决的问题?如果要收到一个更新的消息版本,那么问题的根源'不会中断'我会说'避免使用泛型方法,而是自己做序列化/反序列化。 – astaykov

+0

@astaykov感谢您的回复,公交车的样板代码是容易的部分,是的,我们可以发送消息确定 - 我的问题是这些消息应该是什么?我曾经想过JSON,但是真的需要一些方向,因为我对Azure PHP到C#的小知识可能很危险!此外,C#方法似乎只接受GetBody的通用类型() – g18c

+0

说到......你是对的。只有通用GetBody,但也有重载[GetBody (XmlObjectSerializer序列化程序)](http://msdn.microsoft.com/en-us/library/hh125098.aspx),您可以使用它来注入您自己的XmlObjectSerializer实例。在这种情况下,你的'T'可能是一个非常简单的带有单个Text属性的.NET对象,它是JSON有效载荷。我认为这是处理多种消息格式而不改变队列逻辑的最佳方式。 – astaykov

回答

0

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

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

检索另一个秘诀是,在C#中,你只能叫BrokeredMessage.GetBody()一次。

相关问题