通过防火墙与WCF建立断开连接的消息的建议

时间:2010-12-19 17:23:16

标签: wcf architecture binding

所有

我正在寻找以下情况的建议:

我有一个在公司网络的一部分中运行的组件,它将消息发送到应用程序逻辑组件进行处理。这些组件可能位于同一服务器上,同一网络中的不同服务器(LAN ot WAN)或驻留在云外部。应用程序服务器应该具有可扩展性和弹性。

消息的相关性在于它们到达的顺序很重要。它们带有客户时间戳的时间戳。

我的想法是,我将让客户端使用WCF basicHttpBinding(一些基于.NET CF,它只有基本的)来向Application Server发送消息(这是因为我们可以保证端口80/443将是打开传出连接)。服务器接受这些,并将它们写入队列。如果需要,可以在多台计算机上扩展此队列。

我对使用MSMQ作为队列犹豫不决,但为了正确扩展我们将不得不在每个应用程序服务器上安装单独的专用队列并循环监视队列。我很担心,在服务器恢复之前,我们可能会在服务器上丢失一条消息,并且我们最终可能会处理来自不同服务器的后续消息并中断该序列。

我更喜欢的是所有应用程序服务器都监控的中央队列(例如数据库表)。

考虑到这一点,我想要做的是创建一个自定义WCF绑定,类似于netMsmqBinding,但是使用数据库表而不是我很困惑我是否可以简单地创建一个自定义传输或我需要一个完整的绑定,以及绑定是否允许客户端通过HTTP发送。我环顾了互联网,但我对从哪里开始感到困惑。

我无法使用自定义WCF绑定,但如果我需要分离服务器,这似乎是引入可伸缩性的好方法。

任何建议请帮助,包括替代方案。 非常感谢

1 个答案:

答案 0 :(得分:0)

我会从MSMQ开始,因为它正是为了这个purpouse。在群集计算机上使用单个事务性队列,并让应用程序服务器从此队列中获取要处理的消息。每个消息处理都必须是分布式事务(MSDTC)的一部分。

此方案将确保:

  • 群集队列主机将确保如果一个群集节点发生故障,另一个群集节点仍然可以处理请求

  • 将每条消息发送为可恢复的 - 这意味着该消息将保留在硬盘驱动器上(不仅仅在内存中),因此在整个群集严重故障时,您仍会收到所有消息。

  • 事务性队列将确保所有消息传输操作都是原子的 - 从传出队列到目标队列的移动消息将作为事务处理。这意味着来自传出队列的原始消息将保留在队列中,直到来自目标队列的ack到达。交易处理可确保订单交付。

  • 分布式事务将允许应用程序服务器在事务中使用消息。在应用程序服务器提交事务或事务超时之前,不会从队列中删除消息。

  • MSMQ也可以在.NET CF上使用,因此您可以直接将消息发送到队列,而无需中间不可靠的Web服务层。

  • 应该可以通过HTTP配置MSMQ(但我从未使用它,所以我不确定它是如何与之前提到的功能配合的。)

您提出的解决方案将非常困难。您将最终构建BizTalk的MessageBox。但是如果你真的想这样做,请检查Omar's post有关构建数据库队列表的信息。