Delphi - 2010 - DataSnap白皮书(2)

2019-08-03 12:42

'DSAdmin.GetDatabaseConnectionProperties'; end;

TDSServer组件有五个事件:OnConnect,OnDisconnect,OnError,OnPrepare和OnTrace.我们可以

实现这五个事件来响应不同的情况,例如向日志文件中写入日志.

OnConnect,OnDisconnect,OnError和OnPrepare事件有一个继承于TDSEventObject的参数,包含

了DxContext,传输,服务和DbxConnection组件的属性,在OnConnect和OnDisconnect事件中

TDSConnectEventObject类型还包含了ConnectionProperties和ChannelInfo属性.

TDSConnectEventObject也包括了由错误引起的异常, TDSConnectEventObject还包括了我们要使

用的MethodAlias和ServerClass属性.

OnTrace事件有一个TDBXTraceInfo类型的参数.注意由于这个OnTrace事件处理程序也会包含一

些代码错误,如TDBXTraceInfo和CBRType是编译器未知的.为了解决这个问题,我们需要引用

DBXCommon单元(为识别TDBXTraceInfo类型)和DBComonTypes单元(为识别CBRType类型).

在OnConnect事件处理中,我们可以通过ChannelInfo来查看连接信息,例如(使用自定义的函数

LogInfo向日志文件中写入信息):

procedure TServerContainer1.DSServer1Connect( DSConnectEventObject: TDSConnectEventObject); begin

LogInfo('Connect ' + DSConnectEventObject.ChannelInfo.Info); end;

在OnTrace事件处理程序中我们可以使用TraceInfo.Message中的信息记录服务端正在做什么.

function TServerContainer1.DSServer1Trace(TraceInfo: TDBXTraceInfo): CBRType;

begin

LogInfo('Trace ' + TraceInfo.CustomCategory); LogInfo(' ' + TraceInfo.Message);

Result := cbrUSEDEF; // take default action end;

注意,在客户端也可以使用连接到TSQLConnection组件的TSQLMonitor组件来跟踪DataSnap服务

端和客户端之间的通讯(在创建这个DataSnap服务的客户端时讲解). 一个跟踪日志输出如下所示: 17:05:55.492 Trace

17:05:55.496 read 136 bytes:{\

{\\17:05:55.499 Prepare

如你所见,TraceInfo.Message中包括了传输信息的字节数和被调用的方法名称等信息.

2.1.1.1.2. TDSSERVERCLASS

TDSServerClass组件将服务端特定的类发布给远程客户端(使用动态方法调用).

TDSServerClass组件有一个Server属性指向TDSServer组件.其他除了Name和Tag外的重要属

性是LifeCycle.默认是Session,但是也可设置为Server或Invocation.从长到短,Server,Session

和Invocation的意思是一个类的实例在服务端的生命周期为整个服务,一个DataSnap会话或一次

方法调用.Session表示每个连接将获取其自己的服务类实例.如果将其改为Invocation,将会得到

一个无状态的服务类—可用于部署CGI Web服务应用程序(其也是无状态的,每个请求都进行加载

卸载).将LifeCycle改为Server,则所有的连接请求使用一个服务类实例.这可

以用于计算请求数

量,但是必须自己保证线程安全.

TDSServerClass有四个事件:OnCreateInstance,OnDestroyInstance(当实例创建和注销时触

发).OnGetClass和OnPrepare.OnPrepare事件可用于准备服务方法.使用D2009或使用D2010手动向

容器中添加TDSServerClass时,OnGetClass事件必须由我们自己实现,以便于指定一个可远程调用

的类.在D2010的向导中,已经自动为我们实现了OnGetClass事件,如下: procedure TServerContainer1.DSServerClass1GetClass(

DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass); begin

PersistentClass := ServerMethodsUnitDemo.TServerMethods1; end;

注意:当我们重命名了自动生成的代码单元ServerMethodsUnit1为 ServerContainerUnitDemo.pas后必须修改这里. 2.1.1.1.3. TDSTCPSERVERTRANSPORT

TDSTCPServerTransport组件负责在DataSnap服务端和客户端进行通讯,使用TCP/IP协议.

TDSTCPServerTransport组件有五个重要的属性:BufferKBSize,Filters(D2010新特

性),MaxThreads,PoolSize,Port和Server.

BufferKBSize属性指定通讯缓冲区大小,默认设置为32KB.Filters属性可以包含一个传输过滤

器集合,将在第四节讲解.MaxThreads属性定义最大线程数(默认为0不限制).PoolSize可用于连接

池(如果修改了这里,也需要相应的修改DataSnap客户端).

Server属性指向TDSServer组件.TDSTCPServerTransport组件没有事件. 2.1.1.1.4. TDSHTTPSERVICE

TDSHTTPService组件负责使用HTTP协议组织DataSnap服务端和客户端通讯. TDSHTTPService组件有十个属性(除了Name和

Tag):Active,AuthenticationManager,DSHostName,DSPort,Filters,HttpPort,Name,RESTContext,Server,和只读的ServerSoftware属性.

Active属性指定DSHTTPService开始侦听请求.可以在设计时设置,但是这会影响DataSnap服务

在运行时启动(由于DSHTTPService组件侦听了同一个端口—在设计时启动侦听,在运行时就不能

再启动一个侦听了).最好的方式在在TServerContainer的OnCreate事件中激活TDSHTTPService:

procedure TServerContainer1.DataModuleCreate(Sender: TObject); begin

DSHTTPService1.Active := True; end;

AuthenticationManager属性用于定义处理HTTP验证的管理组件,这里指向了 TDSHTTPServiceAuthenticationManager组件.这个组件在下节详述. DSHostName和DSPort属性用于定义DataSnap服务端连接,但只有在没有指定Server属性时生效.

通常都是使用Server属性.

Filters属性可以包含一系列传输过滤器,在第四节详述.

HttpPort属性定义DSHTTPService组件侦听的特定端口以响应连接.注意这个属性默认是80端口,

通常在发布时必须做修改(IIS等Web服务已占用了80端口).

RESTContext属性指定REST上下文URL,这样就可以以REST服务的方式调用DataSnap服务.默

认,RESTContext属性设置为rest,我们可以用

http://localhost/datasnap/rest/...来调用服务. 在第六节详述REST,JSON和客户端回调函数.

最后,Server属性指向同一个容器中的TDSServer组件.如果没有指定Server属性,也可以使用

DSHostName和DSPort属性连接到使用TCP的DataSnap服务.当设置了Server属性,DSHostName和 DSport属性失效.

TDSHTTPService组件有五个事件:四个是REST相关的,一个是跟踪事件,REST相关事件将在第六 节详述.

OnTrace事件可用于跟踪对DSHTTPService组件的调用,例如:

procedure TServerContainer1.DSHTTPService1Trace(Sender: TObject; AContext: TDSHTTPContext; ARequest: TDSHTTPRequest; AResponse: TDSHTTPResponse); begin

LogInfo('HTTP Trace ' + AContext.ToString); LogInfo(' ' + ARequest.Document); LogInfo(' ' + AResponse.ResponseText); end;

注意HTTP跟踪信息只有当客户端使用HTTP连接到服务端是才会触发(默认使用TCP/IP协议). 跟踪输出如下所示:

17:05:55.398 HTTP Trace TDSHTTPContextIndy 17:05:55.400 /datasnap/tunnel 17:05:55.403 OK

从中可见,AContext设置为TDSHTTPContextIndy,ARequest设置为/DataSnap/tunnel,AResponse 设置为OK.

2.1.1.1.5. TDSHTTPSERVICEAUTHENTICATIONMANAGER

当选中HTTP通讯协议的验证复选框后,TDSHTTPServiceAuthenticationManager组件将自动出现

在服务容器中.也可手动添加到服务容器中,当然TDSHTTPService组件的AuthenticationManager

属性必须指向TDSHTTPServiceAuthenticationManager组件.

TDSHTTPServiceAuthenticationManager组件有一个事件:OnHTTPAuthenticate


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

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

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

马上注册会员

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