上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.1 端口共享在WCF中的意义何在?
在一般的网络环境中,为了尽可能避免网络攻击,都会通过防火墙将绝大部分的端口进行屏蔽,仅仅保留那些常用的网络服务所用的端口,或者仅为某一个类应用保留少量的端口。总而言之,我们不能保证每个跨防火墙通信的应用都具有一个唯一的端口,他们只能共享一个或少量的几个端口。
在Intranet内部,为了保证部署于局域网内的其他计算机的网络应用能够与本机进行正常通信,通常会在本机的防火墙中预留少数几个可用的端口。Intranet内部的主机之间可以使用这些预留的端口通过相应的传输协议,比如TCP、HTTP、Named Pipe等,进行通信。而对于处于Internet和本地网络之间的防火墙,通常只保留80|443端口,保证基于HTTP|HTTPS的网络通信能够正常进行。所以,无论是基于Intranet还是Internet,无论是采用何种传输协议,端口共享都具有重要的现实意义。
对于WCF来讲,当我们将某个服务寄宿于一个进程中,实际上就是通过该进程监听和处理来自客户端的Socket请求。在一般情况下,一个端口被一个监听进程独占使用,也就是说,如果主机上部署了若干服务,而这些服务寄宿于不同的应用程序中,对于这种寄宿应用程序来说,监听的端口必须不同。
所以,我们需要通过特殊的途径实现基于WCF寄宿的端口共享。采用不同的传输协议,有不同的解决方案,对于HTTP协议,可以通过IIS的寄宿方式实现端口的共享,对于TCP,.NET Framework 3.0提供了一个特殊的Windows服务,Net.TCP Port Sharing Service,帮助我们轻松地实现端口的共享。接下来就讨论这两种不同的端口共享解决方案。