如何在服务器使用wcf关闭时在客户端存储消息?

时间:2016-04-04 02:34:28

标签: c# .net wcf

我在工作环境中遇到过这种情况。我有wcf服务,从客户端接收消息并在db中存储。现在我的问题是假设服务器停机10分钟这些10分钟的消息应该存储在客户端的某个地方,客户端应该检查每1分钟服务器的可用性。是否有任何程序,我可以遵循或任何帮助将不胜感激谢谢你

binding :netTCPBinding

1 个答案:

答案 0 :(得分:2)

MSMQ正如您的第一句话所说的那样 - 当您发送MSMQ消息时,如果它无法获得远程队列,那么它将保留在客户端并且内置的MSMQ服务在后台重试。这样,您的邮件一旦发送,就会安全无恙。"如果可能的话,它会到达目的地。 (如果您有大量的消息量并且消息需要存储很长时间,那么存储容量可能是一个问题,但这非常非常不可能。)

配置WCF以发送/接收MSMQ消息

我只会在必要时才这样做。它涉及修改服务和客户端,文档也不太友好。

MsmqBinding的

Here's the documentation。用于配置WCF服务的步骤3和4是空白的。那没用!当我选择.NET 4.0文档时,会填写这些详细信息。

我查看了几个教程,如果我要看看这个,我会从this one开始。通过一次解释太多的东西并包含关于作者其他部分的不必要信息,我发现很多教程都是泥泞的概念。项目

客户端在本地对其消息进行排队

如果您不对服务进行大量修改以支持MsmqBinding。你可以在本地实现排队。如果WCF服务已关闭,则客户端将消息放入本地MSMQ队列,然后每隔一段时间从该队列中读取消息并尝试再次发送到WCF服务。 (如果WCF服务仍然关闭,请将消息放回队列中。)

我只是将消息直接发送到队列并让另一个进程出列并发送到WCF。通过这种方式,客户本身只会发火并忘记"如果可以的话。

这样你就不必处理修改服务的麻烦,但你仍然可以获得好处。如果您的消息无法转到WCF服务,那么它就会转到某个地方,并且安全。它甚至可以在客户端应用程序终止或计算机重新启动后继续存在。

在本地队列中发送和接收消息更容易配置。您的客户可以检查队列是否存在,如果需要,可以create them。这样更容易使用,代码示例更加完整和实用。