使用System.Messaging.MessageQueue或WCF for MSMQ?

Mic*_*hel 4 .net c# wcf msmq

5年前,我开发了一个使用MSMQ的程序.

那时候,我使用了System.Messaging.MessageQueueSystem.Messaging.MessageQueueTransaction将项目放在msmq上.

现在我看到人们使用WCF,我很困惑使用WCF.

首先,大多数代码示例仅显示如何使用WCF将项目放入队列,而不是获取OFF,但更重要的是:当我使用WCF/MSMQ解决方案时,我必须创建一个额外的项目,即wcf服务.

创建一个wcf服务当然不是问题,但我还必须在生产中安装它.

所以我想知道:为什么我应该使用wcf将项目放在队列中,而不是使用.Net对象的解决方案?

或者我是不正确的,我认为当我使用scf,我需要一个额外的应用程序,即wcf应用程序?

编辑:痤疮是这样的:我们有一个人们可以取消订阅的网站.我们不是直接命中数据库(取消订阅),而是将取消订阅请求放在队列中,另一个服务(Windows服务或控制台应用程序)将从队列中获取项目并执行数据库操作

Chr*_*ter 5

使用WCF来包装MSMQ意味着您正在抽象化传输机制,这允许您在以后根据需要进行更改.

您当前的解决方案有一个网站,将请求放入队列,从队列获取请求的Windows服务然后命中数据库.如果你知道你将永远使用MSMQ,那么这是完全可以接受的,Amen.

但是,您可以按如下方式更改它:

  • 您的Windows服务现在托管WCF服务(此处不需要额外的项目).WCF服务公开一个Unsubscribe方法(方法名称描述逻辑操作,而不是它是如何完成的).
  • 您的网站现在充当引用该服务的WCF客户端(此处不需要额外的项目).网站代码调用该Unsubscribe方法.
  • 您配置WCF绑定以使用MSMQ.

如果将来您认为MSMQ是不必要的,或者您认为有更好的方法,您可以只更改WCF绑定以使用其他内容,并且代码将保持不变.