2013-03-07 17 views
2

我正在爲我的Windows Azure項目在節點js(socketio.js)中實現socket.io服務器。我的工作人員角色是在C#中。並且通過服務總線隊列將工作角色的代理消息發送到socketio.js。但是,通過代理消息發送的對象不會被序列化爲json對象。我不知道如何訪問節點js中這個代理消息的正文。如何反序列化節點js中的中介消息的主體?

我可以顯示如何在worker角色中發送代理消息,以及如何在節點js腳本中接收代理消息。

促成消息(即message.body)

@rrayOfTestModelHhttp://schemas.datacontract.org/2004/07/Project.Model  ☺i)http://www.w3.org/2001/XMLSchema-instance☺ 

TestModel的響應體是正通過促成消息體發送對象模型的名稱。

Worker角色:

BrokeredMessage socketioMessage = new BrokeredMessage(messageObject); 
      WorkerRoleClient.Send(socketioMessage); 

節點JS腳本:

serviceBusService.receiveQueueMessage(queue, function (error, receivedMessage) { 
    if (!error) { 
     console.log(receivedMessage); 
     if (receivedMessage != null) { 
      var messageBody = receivedMessage.body; 
      console.log(messageBody);  

      io.sockets.emit('news', messageBody); 
}} 

郵件正文我這裏得到一些簡單的不可讀字符串。我從工作者角色發送適當的對象。請讓我知道,如果您有任何的關於怎麼回事錯

感謝

回答

6

我終於找到了一種方法,以解序列化和獲取的JSON對象的想法。

if (receivedMessage != null) { 
      var messageBody = receivedMessage.body; 

      var jsonString = messageBody.substring(messageBody.indexOf('['), messageBody.indexOf("]")+1);     

      var recordsQueue = JSON.parse(jsonString); 
} 

希望這可以幫助別人

0

,我也想找到一個參考,幫助這樣做,請檢查:在C#

var recordsMessage = Newtonsoft.Json.JsonConvert.SerializeObject(data); 
BrokeredMessage socketMessage = new BrokeredMessage(recordsMessage); 

接收節點JS

工作者角色以下鏈接:http://www.rackspace.com/blog/node-swiz-node-js-library-for-serializing-deserializing-and-validating-objects-in-rest-apis/

它顯示serializatio n和在任何所要求的格式使用節點JS(JSON或XML)的反序列化

讓我知道如果你這個工作:)

1

我知道這是一個古老的票,但我想它可能會幫助人們在未來,因爲它幫助我今天:)。

而不是從您的nodejs應用程序使用子字符串,您可以直接發送字符串中的消息沒有自動序列化。

要做到這一點,使用下面的代碼:

using (Stream stream = new MemoryStream()) 
     using (TextWriter writer = new StreamWriter(stream)) 
     { 
      writer.Write("Start"); 
      writer.Flush(); 
      stream.Position = 0; 

      queueClient.Send(new BrokeredMessage(stream) { ContentType = "text/plain" }); 
     } 

希望這將有助於,

克萊門特