首先,当一个企业要给外网用户提供服务时,应用服务器上应该配置外网IP,同时外网防火墙也要进行相关的配置,
但是当对外的服务器比较多时,可能需要很多外网IP,同时防火墙上要频繁设置,非常麻烦。第二,分发客户端后,一般
配置都要默认设置好(否则会给客户造成不必要的麻烦),那么客户端都会指向一个相对比较固定的服务器IP,也就是说
客户端理想状态是通过一个统一的入口连接到服务器上,调用相关的服务。第三,当一个服务器同时运行多个服务比较繁忙时,
可以把多个服务分离出来,部署到不同的服务器上,但是服务分离应该对客户端是透明的,也就是说客户端不应该感觉到服务
器上的变化,能够按照过去的逻辑进行工作。最后,具有业务逻辑的应用服务器也应该保证一定的安全保护,尽量不要直接
连到外网。为了解决以上的几个矛盾,我们就要采取kbmMW的代理服务实现以上要求。
我们先来做一个最简单的代理服务。
1.建立一个vcl application(在delphi XE2 以后,同样可以使用FM 应用,这里为了方便,使用VCL 框架).
放置相关控件,一个是servertransport, 一个是clienttransport.
注意:servertransport的端口是客户端要访问的端口,
clienttransport.的端口是我们以前做的服务的端口。
2.使用kbmMW 的服务向导生成一个ProxyService.
并设置相关属性
3.然后在主界面里面输入对应的代码
procedure TForm1.Button1Click(Sender: TObject); begin pserver.Active:=true; end; procedure TForm1.FormCreate(Sender: TObject); var sd:TkbmMWCustomServiceDefinition; begin sd:=pserver.RegisterService( TkbmMWProxyService2,true); end;
4.运行原来的服务器程序
5. 运行刚做的代理服务器
6. 把客户端的访问服务器端口改成3000,并运行
客户端成功通过代理服务器访问到真正的应用服务器。
代理服务一般有四种用法:
1.客户端通过代理服务器连到一个应用服务器上
注册代码为
var sd:TkbmMWCustomServiceDefinition; begin sd:=kbmMWServer1.RegisterService(TMyProxyService1,true); end;
这里的True意味着代理服务器将所有的客户端请求无条件发送到应用服务器上。
2)代理服务器提供一些服务,其余的转发到应用服务器上
注册代码为:
var sd:TkbmMWCustomServiceDefinition; begin sd:=kbmMWServer1.RegisterService(TMyInternalService1,false); sd:=kbmMWServer1.RegisterService(TMyInternalService2,false); sd:=kbmMWServer1.RegisterService(TMyProxyService1,true); end;
这里代理服务器也提供两个服务,其他的由应用服务器提供。
3)通过代理服务器连接两个以上的应用服务器
注册代码为
var sd:TkbmMWCustomServiceDefinition; begin sd:=kbmMWServer1.RegisterServiceByName(‘SOMESERVICE1’,TMyProxyService1, false); sd:=kbmMWServer1.RegisterServiceByName(‘SOMESERVICE2’,TMyProxyService2, false); end;
这里代理服务器根据不同的服务,将客户端的请求转发到对应的应用服务器上。
4)客户端既访问代理服务器的服务,也访问不同应用服务器的服务
这个其实就是以上的几种方式组合。
总之,利用代理服务可以解决很多比较麻烦的问题,大家可以灵活使用,以适应自己的实际工作情况。