使用delphi 开发多层应用(十五)使用kbmMW 的代理服务

   首先,当一个企业要给外网用户提供服务时,应用服务器上应该配置外网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)客户端既访问代理服务器的服务,也访问不同应用服务器的服务

这个其实就是以上的几种方式组合。

总之,利用代理服务可以解决很多比较麻烦的问题,大家可以灵活使用,以适应自己的实际工作情况。

你可能感兴趣的:(Delphi)