【发布时间】:2013-05-24 11:01:54
【问题描述】:
我有一系列“消息”要从移动客户端发送到服务器应用程序。
每条消息都有一些公共信息(MAC、时间戳等)及其
所以ObjMessage 是具有MessageInfo 和TransactionInfo 类的基类,然后我有一个ObjReqMsg1 和ObjReqMsg2,它们的int 和string 属性不同,仅用于测试。
// 消息类
[ProtoContract]
public class MessageInfo
{
[ProtoMember(1)]
public string MAC { get; set; }
[ProtoMember(2)]
public string version { get; set; }
[ProtoMember(3)]
public Guid guidMessage { get; set; }
[ProtoMember(4)]
public DateTime timeGenerated { get; set; }
}
[ProtoContract]
public class TransactionInfo
{
[ProtoMember(1)]
public string user1 { get; set; }
[ProtoMember(2)]
public string user2 { get; set; }
[ProtoMember(3)]
public DateTime timeOperation { get; set; }
}
[ProtoContract]
public class ObjMessage
{
[ProtoMember(1)]
public TransactionInfo transactionInfo { get; set; }
[ProtoMember(2)]
public MessageInfo messageInfo { get; set; }
}
// 不同消息的列表
[ProtoContract]
public class ObjReqMsg1 : ObjMessage
{
[ProtoMember(1)]
public int intValue { get; set; }
}
[ProtoContract]
public class ObjReqMsg2 : ObjMessage
{
[ProtoMember(1)]
public string stringValue { get; set; }
}
[ProtoContract]
public class ReqListMessages : IReturn<RespListMessages>
{
[ProtoMember(1)]
public List<ObjMessage> objsReqMessage { get; set; }
}
我所有的测试都是使用 json 和协议缓冲区完成的,并且发送单一消息的异类消息列表是可行的。
我的问题是:
1) 我的想法不是发送十个ObjReqMsg1 请求,而是只发出一个带有List<ObjReqMsg1> 的请求,以节省网络呼叫。它有效并且实际上节省了一些时间,这有意义吗?还是打 10 次电话更正确?
2) 然后,如果它有意义并且是正确的路径,我认为与其进行两次List<ObjReqMsg1> 和List<ObjReqMsg2> 调用,不如进行一次List<ObjMessage> 调用,然后在服务器上检查会更好如果每个 ObjMessage 是 ObjReqMsg1 或 ObjReqMsg2 ,则进行相应的转换和操作。是否可行?
如果是,我做错了什么,因为当我创建一个 List<ObjMessage> 添加 3 个 ObjReqMsg1 和 3 个 ObjReqMsg2,并与检查员检查 intValue 和 stringValue 是否存在时,我做:
string serialized = ServiceStack.Text.JsonSerializer.SerializeToString<ReqListMessages>(reqListMessage);
我没有找到序列化的intValue 和stringValue。
显然在服务器端我收到了 6 个ObjMessage 的列表,而不是 3 个ObjReqMsg1 + 3 ObjReqMsg2 的列表。
你能帮忙吗? 谢谢
【问题讨论】: