【发布时间】:2011-07-08 01:10:56
【问题描述】:
我有一个运行一些 WCF 服务的服务器。它位于我公司的内部网络中。我想将它的服务公开给互联网,但我不想直接公开服务器。
有没有办法在我们的 DMZ 中设置一个服务器来充当内部服务器的代理?理想情况下,解决方案需要在代理服务器上使用最少的代码,并且不需要对服务进行两次更改。
【问题讨论】:
我有一个运行一些 WCF 服务的服务器。它位于我公司的内部网络中。我想将它的服务公开给互联网,但我不想直接公开服务器。
有没有办法在我们的 DMZ 中设置一个服务器来充当内部服务器的代理?理想情况下,解决方案需要在代理服务器上使用最少的代码,并且不需要对服务进行两次更改。
【问题讨论】:
做你想做的最好的方法是使用内置的 WCF 4 Routing Service. 你可以做更多的事情,而不仅仅是将来自另一台服务器的调用重定向到你的内部服务。这都是配置驱动的,因此您无需更改服务合同或重新编译任何代码。您甚至可以使用一种绑定公开服务并使用不同的绑定调用目标服务。
编辑:
RoutingService 的MSDN provided samples 是查看 RoutingService 配置工作示例的良好起点。像 WCF 的其他东西一样,翻阅文档是一项乏味但几乎总是必要的成本来学习如何使用该死的东西 :)
【讨论】:
这取决于您所谈论的更改类型。如果它只是重定向到真实服务器的同一服务合同的替代实现,那么您需要进行更改的唯一时间是合同本身发生变化,而不是它的实际实现(这些程序集甚至不应该安装在代理服务器)。 WCF 的某些方面允许您使用一个操作来编写服务,该操作处理通用消息并返回通用消息 (OperationContract(Action="*")] public void Message Execute(Message incoming),但随后您需要检查收到的消息以确定如何转发它。
【讨论】: