2013-03-07 35 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" }); 
     } 

希望这将有助于,

克莱门特