我需要通过非常规的慢速、低带宽、不稳定的连接发送带有元数据的二进制有效载荷,这种连接基本上可以像第三层及以上的任何其他正常连接一样处理。我期望二进制有效负载不超过512kb,但可能只有16kb左右。我的客户端运行的是。net Compact Framework,我的服务器运行的是普通的。net Framework。
我正在寻找一个方法或库序列化和传输对象在一个流(特别是一个SslStream或一些等效的)连续在随机间隔(始终在连接上)具有大量的冗余,基本上是消息队列。我看过各种XML, SOAP, JSON, protobuf实现和WCF,但有些不兼容,太重,没有足够高的冗余或有糟糕的文档。
我愿意自己写一些东西或者移植一些东西,但是如果有一些东西可以工作并获得一些想法就会很有帮助。
我发现了一些叫做NetSockets的东西,它有一些bug,但它很简单,小,多线程,我可以改变它来使用我想要的流,数据对象和序列化器,并将其移植到我的客户端。我的答案是在NetBasePayloadStream, NetBaseStream和NetObjectStream类的实现。
我会尝试MSMQ。它支持。net CF和所有MS服务器平台:
http://msdn.microsoft.com/en-us/library/ms229665%28v=VS.90%29.aspx我没有在"不可靠"连接中使用它,但它支持事务队列和可靠交付,这就是为什么它听起来像你想要的。在这个特殊的空间里,你真的不想为了某个目的去发明一些东西,或者重新利用其他东西,因为很难做到正确。我认为WCF也支持Net CF上的MSMQ传输,这将提供一个干净的消息抽象。
所以澄清一下,WCF与MSMQ传输,如果它被支持。
这里的关键是在你描述的场景下评估和测试它,因为没有什么是100%完美的。