5 年前,我开发了一个使用 MSMQ 的程序。
那时,我使用 System.Messaging.MessageQueue
和 System.Messaging.MessageQueueTransaction
将项目放在 msmq 上。
现在我看到人们使用 WCF,但我很困惑是否要使用 WCF。
首先,大多数代码示例只展示了如何使用 WCF 将项目放入队列,而不是关闭,但更重要的是:当我使用 WCF/MSMQ 解决方案时,我必须创建一个额外的项目,即 wcf 服务。
创建 wcf 服务当然不是问题,但我还必须在生产环境中安装它。
所以我想知道:为什么我应该使用 wcf 将项目放入队列,而不是使用 .Net 对象的解决方案?
或者我认为当我使用 scf 时,我需要一个额外的应用程序来交付,即 wcf 应用程序,我是否不正确?
编辑: 场景是这样的:我们有一个人们可以取消订阅的网站。我们没有直接访问数据库(取消订阅),而是将取消订阅请求放在队列中,另一个服务(Windows 服务或控制台应用程序)将从队列中获取项目并执行数据库操作
最佳答案
使用 WCF 包装 MSMQ 意味着您正在抽象出传输机制,这允许您以后根据需要更改它。
您当前的解决方案有一个将请求放入队列的网站,以及一个从队列中获取请求然后访问数据库的 Windows 服务。如果您知道您将永远使用 MSMQ,那是完全可以接受的,阿们。
但是,您可以如下更改它:
- 您的 Windows 服务现在托管 WCF 服务(此处不需要额外的项目)。 WCF 服务公开了一个
Unsubscribe
方法(方法名称描述了逻辑操作,而不是它是如何完成的)。 - 您的网站现在充当引用该服务的 WCF 客户端(此处不需要额外的项目)。网站代码调用
Unsubscribe
方法。 - 您将 WCF 绑定(bind)配置为使用 MSMQ。
如果将来您决定不需要 MSMQ,或者您想到了更好的方法,您只需更改 WCF 绑定(bind)以使用其他内容,代码将保持不变。
关于c# - 将 System.Messaging.MessageQueue 或 WCF 用于 MSMQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065442/