C#中的单个进程的简单持久性消息队列

时间:2016-07-26 17:56:43

标签: c# .net windows-mobile persistent-storage

我在C#中为Windows Mobile做一个简单的Messaging系统。该应用程序包括使用Web服务通信发送和接收简单文本消息。消息队列应该是持久的,如果与Web服务的连接失败或应用程序崩溃,则可以避免数据丢失。

我了解MSMQ,RabbitMQ,DotNetMQ,但它们应该安装在设备中,这是非常简单的设备,我不想在每个手机中安装任何其他工具,只是为了这个简单的任务。

我已经实现了将XML序列化队列写入文件的函数,并且我一直从这个文件中读写。

我感谢任何更好的想法来解决这个问题。 感谢

3 个答案:

答案 0 :(得分:0)

我真的不知道什么是Windows Mobile可用,但您可以尝试使用基本队列(正常或并发,取决于您的应用程序),并附带两个文件。将排队的所有内容写入一个“入队日志”文件,并将出列的所有内容写入另一个“出列日志”文件。 这两个文件总能为您提供足够的信息来恢复您的队列,而您无需完全重写/完全序列化您的队列。它需要手工实施。

关于出队: 例如,假设我有一个包含3条消息的队列:“one”,“two”,“three”。现在我想发送下一个(也是第一个)消息“one”。我将“一个 - 从队列中删除”一行添加到我的“出队日志”中,然后从队列对象中将“一个”出列,并将其发送到我希望将其发送到的位置。当它被发送时,我将“ - 从队列中完成删除”附加到我的“出列日志”。现在我的日志文件中有一行“一个 - 从队列中删除 - 从队列中删除”。

何时崩溃并不重要,我将始终能够恢复队列对象的状态(至少现在我在这个过程中没有看到任何逻辑错误)。所以imho它并不棘手,但仍然......一些代码应该被编码。这将是几页代码。

答案 1 :(得分:0)

Windows Mobile 6.5设备本身支持不需要安装

MSMQ。顺便说一句:工业领域仍有许多供应商提供基于WM65的设备,所以这还没有过时。

基于Windows Mobile(CE)的MSMQ持久且易于使用。它通常用于设备上的进程间通信或客户端服务器通信(需要在服务器'上安装MSMQ)。

因此,主线程创建了一个MSMQ,你的进程中的一个线程填充了MSMQ,另一个线程可以查看' peek'并且,在成功传输之后,“出列”'来自同一MSMQ的消息。有关简单示例,请参阅here

答案 2 :(得分:-1)

当然,最好使用SQLite。 我希望这会对你有所帮助。