c# - 将 System.Messaging.MessageQueue 或 WCF 用于 MSMQ?

标签 c# .net wcf msmq

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

那时,我使用 System.Messaging.MessageQueueSystem.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/

相关文章:

.net - 带有 WIX 的 C++ 可再发行包

WCF 验证错误

c++ - gSOAP 到 WCF。应用程序/soap+xml;字符集=utf-8

c# - 我怎样才能确保只有一个线程会做某事?

c# - 如何创建通用列表框对话框控件

c# - 为什么在模态对话框中调用 Hide() 时 FormClosing 会触发两次?

wcf - 绑定(bind)在 "dual mode"中不起作用(webHttpBinding 和 basicHttpBinding)

c# - 将 CssClass 分配给 MasterPage 中的 LinkBut​​ton

c# - Sitecore 比较两个项目

c# - 在 FlipView 的 KeyDown 事件中处理方向键