Delphi - 2010 - DataSnap白皮书(3)

2019-08-03 12:42

事件,可以验证

Datasnap客户端到服务端连接的HTTP信息.

procedure

TServerContainer1.DSHTTPServiceAuthenticationManager1HTTPAuthenticate(

Sender: TObject; const Protocol, Context, User, Password: string; var valid: Boolean); begin

if (User = 'Bob') and (Password = 'Swart') then valid := True else

valid := False end;

当然,你可以使用数据库技术来扩展验证方式.客户端最好使用HTTPS方式将用户名和密码等

HTTP验证信息发送到服务端,所以我希望易博龙可以在现有HTTP和TCP/IP基础上在添加一个HTTPS 协议.

HTTPS可以确保连接安全和数据包加密, 数据包被窃取也不会泄露用户和密码信息.可与你所在

域的ISP或Web管理员协商是否有可能使用HTTPS—--强烈推荐(如我使用的 是https://www.bobswart.hl).

DataSnap服务应用程序另一个优势是可将HTTP验证信息(所用协议和上下文信息)记录下来.以

便于查找谁登陆过,谁试图登录(如做欺骗登录操作试图获取DataSnap服务的权限).

2.1.1.2. SERVERMETHODSUNITDEMO

注意我们已经检查了ServerContainerUnitDemo.pas单元,现在看一下DataSnap服务的另外重要

的单元:ServerMethodsUnitDemo.pas单元.在新建DataSnap服务对话框中我们

指定了

TDSServerModule类作为基类,因此TServerMethods1类型继承于TDSServerModule(其继承于

TDSServerModuleBase,又继承于TProvideDataModule,添加一个析构函数和BeforeDestruction过

程. TProvideDataModule继承于正常的TDataModule,增加了服务提供者的能力 更多信息见后 面).

由于TServerMethods1继承于TDataModule,设计时可以看到一个数据模块的可视区域.我们可以

向其中添加一下不可视组件,如数据存取控件等.在第三节将操作数据库,现在保持设计区为空,仅

向TServerMethods1类添加方法.

如果不想向项目组添加其他类型的项目—DataSnap控制台应用程序及DataSnap Windows服务应

用程序,可跳到2.1.4节查看实现服务方法. 2.2. DATASNAP 客户端

第一个DataSnap服务端范例启动并侦听请求,现在创建一个客户端.本节中,我们将讲解如何在

客户端连接服务端,如何导入方法生产服务类.

确信DataSnap服务已启动,我们创建一个DataSnap客户端应用程序项目.为了在设计时方便切换

DataSnap服务项目和DataSnap客户端项目,将客户端项目添加到同一个项目组.任何类型的项目都

可作为DataSnap客户端项目,这里我们选择VCL窗口应用程序,保存为DataSnapClient.dpr,主窗体

为ClientForm.pas.控件栏中DataSnap服务目录中含有六个DataSnap(服务)组件,DataSnap客户端

目录中不含我们现在需要的组件.

DataSnap客户端目录中的组件都是一些老的DataSnap组件,可以使用,但不推荐.但可使用新

的TDSProviderConnect组件,可以在新的DataSnap客户端上连接老的DataSnap服务(3.2中详述).

除了DataSnap客户端目录,我们还要看看dbEpress目录,可以找到一个新的组件叫做

TSQLServerMethod(注意:在下一个截图中这个新组件很容易发现,其用TSql前缀替代了TSQL前

缀).

TSqlServerMethod组件可用于调用DataSnap服务的远程方法,但首先需要连接到DataSnap服务.

可以使用TSQLConnect组件建立连接—--不在使用原来的TXXXConnection组件.为了灵活

性,TSQLConnection组件的Drive属性下拉框中有个新选项:DataSnap.在ClientForm上放置一个

TSQLConnection组件,设置其Driver属性为DataSnap.Driver属性将变成可展开的对象,展开后如 下图:

注意:默认CommunicationProtocol属性为空,TSQLConnection将使用TCP/IP作为通信协议(端口

211).BufferKBSize为32(KB),端口设置为211(与服务端设置相同).实际应用中一般将端口号设置

为其他端口(同时修改服务端客户端),因为211端口是DataSnap默认端口不安全.

HostName,UserName和Password用于连接到DataSnap服务.在本地测试时,将HostName设置为

localhost,通常可以设置为服务器名称,DNS或IP地址.

不要忘记将TSQLConnection的LoginPropt属性设置为False,否则将会在连接的时候弹出登录窗 口.

一旦TSQLConnection的Driver属性设置好,就可以设置Connected属性为True去连接DataSnap服

务端.注意这时DataSnap服务必须运行才能连接成功. 2.2.1. DATASNAP客户端类

在确定连接正常后,右击TSQLConnection组件,选择Generate DataSnap Class选项,将生成一个

新单元,默认叫做Unit1,含有一个叫做TServerMethods1Client的类(在DataSnap服务方法类名称

后加了一个Client).保存单元为ServerMethodsClient.pas. 这个TServerMethods1Client类如下所示

type

TServerMethods1Client = class private

FDBXConnection: TDBXConnection; FInstanceOwner: Boolean;

FEchoStringCommand: TDBXCommand; FServerTimeCommand: TDBXCommand; public

constructor Create(ADBXConnection: TDBXConnection); overload; constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload; destructor Destroy; override;

function EchoString(Value: string): string; function ServerTime: TDateTime; end;

如你所见,TServerMethods1Client类有两个构造方法,一个析构方法和两个我们在服务端定义 的服务方法.

为使用这些方法,将ServerMethodsClient单元引用到ClientForm,在客户端窗体上放置一个按

钮,在按钮的OnClick事件中写如下代码:

procedure TForm2.Button1Click(Sender: TObject); var

Server: TServerMethods1Client; begin

Server := TServerMethods1Client.Create(SQLConnection1.DBXConnection); try

ShowMessage(DateTimeToStr(Server.ServerTime)) finally Server.Free end; end;

这个代码将创建一个TServerMethods1Client类实例,然后调用ServerTime服务类,最后释放这

个DataSnap服务的代理对象.

点击按钮将弹出对话框显示服务端的时间.

同样方法测试EchoString.

2.2.1.1. HTTP COMMUNICATION PROTOCOL

注意我已经提到TSQLConnection组件以TCP/IP作为默认通讯协议.这样我们就看不到任何HTTP

跟踪信息(在2.1.1.1.4小结中定义).然而,很容易修改通讯协议,仅需在TSQLConnection的Driver

属性中的CommunicationProtocal子属性中输入HTTP即可.注意这是我们还要修改Port属性,因为

211被TCP/IP占用,同时要修改服务端的TDSHTTPService组件的端口号. 修改后运行DataSnap客户端,会出现如下错误:

解决方法是在DataSnap客户端向ClientForm中添加DSHTTPLayer单元引用. 2.2.1.2. HTTP 验证

使用HTTP通讯协议的好处之一是可以使用其包含的HTTP验证.由DataSnap服务端的

TDSHTTPServiceAuthenticationManager组件所支持(详见2.1.1.1.5). 如果实现了OnHTTPAuthenticate事件处理,将会核对HTTP验证.我们必须保证输入正确的信息才

能确保TDSHTTPServiceAuthenticationManager验证通过.否则将会得到一个


Delphi - 2010 - DataSnap白皮书(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:长方体与正方体的认识评课

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: