为什么在有WCF时需要Service Bus?

时间:2010-11-20 13:59:42

标签: wcf servicebus

我正在阅读WCF和Service Bus主题,但我没有在某些主题中使用Service Bus。查看使用Service Bus的图像:

http://ecn.channel9.msdn.com/o9/learn/Azure/Labs/IntroServiceBus/Lab.html/html/images/4a0aa8f8-f4d1-49b6-b950-cf954402c599.png

在上图中,您的服务位于防火墙后面,然后您显然需要服务总线。但是,如果您想公开您的服务,是不是简单地删除防火墙的解决方案?然后每个客户都可以连接到您的服务。

据我所知,您不想删除整个网络的防火墙,但您可以使用IIS创建一个公开可见的网络服务器并在其上运行您的服务。或者我错过了什么?

3 个答案:

答案 0 :(得分:6)

WCF是一种设置和管理通信接口的方法。它不关心您的邮件内容。

然而,service bus的不同之处在于它负责邮件路由。

您可以使用WCF和其他位构建服务总线,但WCF本身并不是服务总线。

答案 1 :(得分:5)

服务总线可帮助您增强服务架构。

许多组织都将其视为点对点或意大利面条整合。 这个不好。 服务总线可以帮助您实现单点集成。例如在您链接的映像(Azure Service BUS体系结构)中,通过将服务添加到ESB,您可以使用访问控制来统一服务身份验证,即使它们位于防火墙后面而不是每个负责验证自身的服务。此外,即使服务的地址发生了变化,您只需要在一个地方(ESB)而不是所有引用它的应用程序进行更改。

服务总线可以执行许多其他操作,包括验证服务消息,在不满足您的要求时对其进行增强,例如从普通的旧XML转换为SOAP,路由消息,增强消息等。

答案 2 :(得分:2)

Service Bus是一种中继服务,因此所有客户端都将指向云端。黑客将攻击云中的中继服务,而不是你的WCF服务。所有安全方面都由中继服务负责。

要准确回答您的问题,并非所有WCF服务都托管在服务总线上,您的解决方案可能就足够了。这取决于您的需求和现有的基础设施。

我强烈推荐Juval Lowy的this article

摘自文章:

中继服务是驻留在云中的服务,其工作是协助连接,将客户端呼叫中继到服务。这种中继解决方案确实需要客户端和服务内部网以允许连接到云,但由于云构成客户端和服务的中立区域,因此大多数环境允许呼叫到因特网。首先,服务和客户端都必须建立连接并对中继服务进行身份验证。此时,中继还会记录服务的位置以及如何最好地回拨它。当客户端呼叫中继服务时,中继服务将呼叫(客户端消息)转发给服务。虽然序列似乎很简单,但在实践中它涉及大量复杂的网络编程,消息传递和标准知识,安全专业知识等。对于绝大多数应用来说,这样的解决方案是遥不可及的。 这正是Microsoft .NET Service Bus旨在填补的空白。它是一种现成的中继服务,在Microsoft数据中心托管和管理。 .NET Service Bus充当云中的外围网络,提供管理客户端和服务凭据的单一位置。 .NET Service Bus是服务的前端;它将服务封装并隔离在潜伏在互联网上的恶意呼叫者,并负责排除从拒绝服务到重放攻击的各种攻击,同时模糊实际服务的身份和真实位置。 连接到常规Windows Communication Foundation(WCF)服务和使用中继服务之间的主要区别在于托管。在中继的情况下,服务必须连接到.NET Service Bus,进行身份验证,在客户端发送请求之前监听来自中继服务的呼叫。这意味着您必须显式启动主机或使用NT服务作为主机,并且您无法从Windows激活服务(WAS)(或IIS)中托管,因为WAS将仅在第一个请求进入后启动主机,这永远不会发生,因为主机首先没有连接到.NET服务总线。 .NET Service Bus通过提供一组专用绑定和行为来支持WCF友好的编程模型。总的来说,除了编程模型的一些细微变化之外,使用中继服务与使用任何其他WCF服务没有什么不同。 .NET Service Bus支持可靠消息传递,消息安全性和传输安全性的核心WCF功能。