我有WCF service
可以接收需要将信息写入数据库的几个请求/分钟(或秒)。我不想将它同步写入,而是将这些请求放在服务器上的某种队列中,这样另一个进程就可以出现并处理它们。客户端只需要确认收到了请求。我已经阅读了很多关于MSMQ
和WCF
等的内容,但似乎用MSMQ
从客户端而不是Web服务写入队列,这不是我想要的。
有没有办法在不涉及数据库的WCF方法中执行以下操作。也许我没有理解MSMQ
对的概念。
public bool ProcessMessage(string message)
{
if(IsValid(message))
return AddToQueue(message);
return false;
}
编辑:我需要在写入队列之前验证消息。
答案 0 :(得分:3)
我目前在我创建的应用程序中执行此操作。 WCF服务作为IIS上的HTTP服务托管。它接受调用和数据包,我接收数据,验证它(告诉调用者它是否错误)然后将数据发送到另一个使用netMSMQ绑定的WCF服务,该服务然后最终写入数据库。关于这一点的好处是它将在一个MSMQ上排队,并且绑定到该MSMQ的WCF服务一次弹出一条消息并对其进行处理。然后,HTTP WCF服务可以处理任意数量的请求,并且不必担心池化消息,因为这是WCF / MSMQ绑定服务的作用。此模式的通用名称是Bridge框架。
ETA:第二个服务(MSMQ绑定的WCF服务)始终作为Windows服务运行。它还处理关注点分离。 HTTP服务验证并不关心数据库,其他服务处理写入数据库。
答案 1 :(得分:0)
使用MSMQ的目的应该是消除您的服务需要担心排队任何事情。 MSMQ将保证您的邮件以正确的顺序交付,并且您的服务将以正确的顺序处理它们。
如果您正确设置,您的服务根本不应该维护队列。