使用WCF服务排队请求

时间:2011-11-04 21:04:41

标签: wcf message-queue

我有WCF service可以接收需要将信息写入数据库的几个请求/分钟(或秒)。我不想将它同步写入,而是将这些请求放在服务器上的某种队列中,这样另一个进程就可以出现并处理它们。客户端只需要确认收到了请求。我已经阅读了很多关于MSMQWCF等的内容,但似乎用MSMQ从客户端而不是Web服务写入队列,这不是我想要的。

有没有办法在不涉及数据库的WCF方法中执行以下操作。也许我没有理解MSMQ对的概念。

 public bool ProcessMessage(string message)
    {
      if(IsValid(message))
       return AddToQueue(message);

      return false;
    }

编辑:我需要在写入队列之前验证消息。

2 个答案:

答案 0 :(得分:3)

我目前在我创建的应用程序中执行此操作。 WCF服务作为IIS上的HTTP服务托管。它接受调用和数据包,我接收数据,验证它(告诉调用者它是否错误)然后将数据发送到另一个使用netMSMQ绑定的WCF服务,该服务然后最终写入数据库。关于这一点的好处是它将在一个MSMQ上排队,并且绑定到该MSMQ的WCF服务一次弹出一条消息并对其进行处理。然后,HTTP WCF服务可以处理任意数量的请求,并且不必担心池化消息,因为这是WCF / MSMQ绑定服务的作用。此模式的通用名称是Bridge框架。

ETA:第二个服务(MSMQ绑定的WCF服务)始终作为Windows服务运行。它还处理关注点分离。 HTTP服务验证并不关心数据库,其他服务处理写入数据库。

答案 1 :(得分:0)

使用MSMQ的目的应该是消除您的服务需要担心排队任何事情。 MSMQ将保证您的邮件以正确的顺序交付,并且您的服务将以正确的顺序处理它们。

如果您正确设置,您的服务根本不应该维护队列。