使用WCF服务排队请求



我有一个WCF service,它可以每分钟(或秒)接收几个需要将信息写入数据库的请求。我希望将这些请求放在服务器上的某种队列中,而不是同步编写,以便其他进程可以来处理它们。客户端只需要收到请求的确认。我读了很多关于MSMQWCF等,但似乎MSMQ你从客户端写入队列,而不是web服务,这不是我想要的。

是否有一种方法可以在不涉及数据库的WCF方法中完成以下操作?也许我没有正确把握MSMQ的概念。

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

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

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

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

使用MSMQ的目的应该是消除您的服务对排队的需要。MSMQ将保证您的消息以正确的顺序传递,并且您的服务以正确的顺序处理它们。

如果设置得当,你的服务根本不应该维护队列

最新更新