2013-04-01 106 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()一次。

相關問題