基于WCF判别内外网访问服务器的方法
2014-04-01,,
, ,
(河南大学 计算机与信息工程学院,河南 开封 475004)
随着信息化进程的不断推进,越来越多的公司遇到内外网同时访问服务器的问题,目前解决此问题有两种方法:①服务器发布两套服务,一套针对内网用户,一套针对外网用户;②通过“域名”来实现内外网统一访问[1]。方法①会有大量重复工作,浪费资源,不可行;方法②能使内外网用户利用同一个域名统一访问服务器,虽然也能解决内外网同时访问的问题,但是需要单独安装部署内网DNS服务器,大大增加了成本。
随着互联网络、计算机技术的快速发展,相关专业人士已经解决了同一服务器跨越内外网提供服务的网络技术问题,通过网络地址转换技术(NAT)实现服务器内外网IP端口映射[2-4]。但对于服务器和客户端的通信问题以及内外网用户区分的问题,还需进一步探讨。基于此,本文提出了一种基于WCF通信技术判别内外网访问服务器的方法。
1 内外网问题
服务器位于内网,分配一个内网IP,便于为内网用户提供服务;通过NAT可以获取一个外网IP端口,便于为外网用户提供服务。用户根据所处内外网环境不同而采用不同的路径访问。内外网问题可描述为如何区分用户所处环境,并赋予其相应的访问路径,使其能正常访问服务器。这就需要解决服务器和客户端的通信问题。
公司对外发布Web服务和FTP服务,用户访问公司的Web服务和通过网页链接访问FTP服务时,要能正确区分内外网用户,使他们均能按照权限管理策略,采用正确的访问路径正常访问和下载数据。解决此问题的系统网络拓扑如图1所示。
2 基于WCF技术判别访问的方法
WCF(Windows Communication Foundation)是由微软开发的一系列支持数据通信的应用程序框架,它集成了Web服务、远程处理、消息队列以及各种通信协议,并提供了可扩展通信技术,是一个用于创建和运行分布式系统的技术集合,使用它能创建安全的、可靠的、跨平台的分布式解决方案,且能与已有系统兼容协作。
本文采用WCF技术解决客户端和服务器端跨越内外网的通信问题,并利用WCF服务来判别内外网用户,解决了系统兼容性问题。由于WCF技术具有跨平台、可多种程序作宿主的特性,所以,在不同平台、不同程序的开发中被广泛应用,亦即,本文解决内外网问题的方法可推广到多种开发程序中。
图1 系统网络拓扑图
2.1 方法原理
将FTP服务器的内、外网IP地址和端口号分别按照一定的格式写入配置文件,并将内网IP地址范围也写入配置文件。服务器端创建WCF服务,获取配置文件中FTP服务器的内、外网IP地址和端口号,并分别将其加工成内、外网数据下载访问路径。同时,获取配置文件中内网IP地址范围。用户登录Web网站,在客户端发送数据下载请求,调用WCF服务,与服务端进行通信,服务端接收请求,并从消息属性中获取用户IP,将其与内网IP地址范围进行对比,判断用户是否属于内网。然后根据判断结果,采用相应的访问路径链接到FTP下载页面,使用户能正常下载数据。方法原理流程如图2所示。
图2 方法原理流程图
2.2 实现过程
首先,分别获取配置文件中FTP的内、外网访问路径和内网IP地址范围。具体步骤是:①在网站的服务器端创建WCF服务,读取配置文件中FTP的内、外网IP地址和端口号;②将上述信息加工成内、外网FTP下载地址;③读取配置文件中的内网地址范围。其次,获取客户端用户IP并判断是否属于内网。
用户访问网站时,客户端和服务端会互传消息,应用WCF通信技术,可以跨平台、跨越网络。在网站后台服务端创建WCF服务,获取这些消息的属性,从中获取客户端用户的IP。步骤如下:
(1)获取当前线程的执行上下文:
OperationContext context =
OperationContext.Current
(2)获取上下文中传入消息的消息属性:
MessageProperties messageProperties =
context.IncomingMessageProperties
(3)使得发送消息的客户端IP地址和端口号可用:
RemoteEndpointMessageProperty endpointProperty=messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty
(4)获取发送消息的客户端的IP地址:
string clientIP =
endpointProperty.Address;
(5)将获取的用户IP和内网地址范围对比,判断其是否属于内网:
string[] innerIpStart =
Option.Parameter.InnerFTPipStart.Split('.');
string[] innerIpEnd =
Option.Parameter.InnerFTPipEnd.Split('.');
string[] clientIPs=clientIP.Split('.');
if (clientIPs[0] ==
innerIpStart[0]&&clientIPs[1]==innerIp
Start[1]&&clientIPs[2]==innerIpStart[2])
{
if (int.Parse(clientIPs[3]) >
int.Parse(innerIpStart[3])
&&int.Parse(clientIPs[3]) <
int.Parse(innerIpEnd[3]))
flag = true;
}
else
flag=false
最后,Web前台客户端根据上述判断结果采用相应的下载路径:内网IP采用内网下载路径,外网IP采用外网下载路径,链接到FTP。
外网用户访问服务时,由于跨越内外网以及安全措施防火墙,客户端不能直接访问服务器端的配置文件,不能做相关操作,需要通过WCF技术与服务器端进行通信来完成这些操作,从而实现内外网的隔离并做到实时传输数据。
判别内外网用户是后台服务器执行的。终端用户访问网页,进行下载操作,只要正常链接到FTP,即可下载数据。
2.3 项目验证
在“XX业务化运行系统——用户服务分系统”中,如图3所示,用户下载产品时需要解决内外网问题,采用的就是本文提出的解决办法。
图3 XX业务化运行系统——用户服务分系统主界面
用户选择要下载的产品,点击【下载】按钮,等待后台服务器处理。未应用此方法时,不管配置文件中填写的是FTP服务器内网IP地址还是外网IP地址,总有一些用户(可能是内网用户,也可能是外网用户)在发出数据下载请求时,系统出现问题,不能正常链接到FTP下载页面。应用此方法后,系统即可链接到FTP,下载产品,如图4所示。
由图3、图4可知,用户提出请求,系统后台服务采用此方法进行处理,最终解决内外网问题,无论是内网用户还是外网用户,都能正常链接到FTP,下载产品。
3 结 语
基于WCF技术判别访问服务器的方法,既解决了客户端和服务端的通信问题以及内外网用户区分的问题,使内外网用户均能正常访问FTP服务器,又没有增加额外的开销,实用可行。判断用户IP是否属于内网以及FTP下载地址的转换都是在后台服务中进行的,用户只需点击网页链接即可通过FTP下载数据,操作界面友好,符合用户需求。应用WCF技术,可跨越内外网进行通信,适用于多种宿主程序,可跨平台,与已有系统兼容协作。由于上述优势,此方法亦适用于服务器采用双网卡情况以及其他获取服务器内外网IP地址的情况。
图4 应用WCF技术后链接到FTP的下载界面
参考文献:
[1] 森林.实战Web服务器内外网访问难题[J].个人电脑,2010(11):98-99.
[2] 鄢萍,易润忠,童亮.基于DDNS和NAT的服务器内外网动态映射[J].计算机工程,2008,34(20):136-137.
[3] 廖龙俊.怎样实现内外网同时访问[J].电脑编程技巧与维护,2012(7):91-92.
[4] 陈静,宋伟,汪凯.通过NAT进行双向访问的方法:中国,CN1561061 [P].2004-02-27.
[5] 谢希仁.计算机网络[M].北京: 电子工业出版社, 2007.
[6] Michele Leroux Bustamante.Learning WCF [M].Beijing: O'Reilly Media, 2007.
[7] Richard W.WCF: A Case Study Involving a Distributed Client/Server Game[J].Journal of Object Technology, 2009, 8(2):71-90.