闲来无事,今天休息,放点资料上来活下人气!2(转)
还要遵循以下规则:
1. 远程对象不能为自动生成对象,而只能使用CREATE来生成。
2. 远程对象的公有函数的参数不能为指针。
3. 远程对象的公有函数的参数的类型可能为PowerBuilder支持的所有简单类型和结构,但不能为PowerBuilder内部对象如DATASTORE。
4. 远程对象的公有函数的参数可以为用户自定义的不可视对象。
5. 上述对参数的描述同样适应于返回值。
6. 远程对象的公有函数中不能包含有对可视对象操作的代码。
只要是符合上述条件的用户自定义不可视对象,都可以作为应用服务器的服务的提供载体,客户端程序可以通过远程对象代理来调用这些对象的函数或使用其成员。
定义应用服务器的服务实际上就是在服务器应用中定义远程对象。
2.3.2客户端程序存取应用服务器提供的服务
客户端程序是通过远程对象代理来存取应用服务器提供的服务的。所谓远程对象代理,就是具有远程对象所有公有成员和函数定义的对象,它描述了远程对象所能提供的服务。我们可以使用PROXY类型的工程来生成远程对象的相应远程对象代理。
如有远程对象代理uo_timeserver 含如下成员函数:function datatime getdate(),在客户端如何调用此函数呢?如下:
//客户端接口对象为 g_connection
uo_timeserver timeserver //定义一远程对象代理对象
g_connection.CreateInstance(uo_timeserver) //建立远程对象实例
messageBox(‘服务器时间’,uo_timeserver.getdate()) //调用远程对象的函数
注意,上面MessageBox显示的时间是服务器的时间。如上所述,我们归纳出客户端调用应用服务器的服务的步骤如下:
1. 定义相应的远程对象代理对象
2. 调用客户端接口对象connection的CreateInstance函数建立远程对象实例
3. 通过远程对象代理对象调用远程对象的函数或存取其数据成员
2.3.3了解应用服务器的会话
现在我们已经知道该怎样建立应用服务器、怎样通过应用服务器提供服务了;也知道怎样在客户端程序来使用这些服务。思考如下代码:
在应用服务器端应用的OPEN事件中:
//设置好SQLCA的各项属性
。。。。。
connect using sqlca;
在应用服务器端有一远程对象,其中有一段代码:
datastore dsUser
dsUser = create datastroe
dsUser.dataobject=’dw_user’
dsUser.SetTransObject(sqlca)
dsUser.Retrieve()
MessageBox(‘信息’,dsUser.RowCount())
在预览dw_user数据窗口时,共有100行数据,那么上述代码运行结果如何呢?结果显示,dsUser.RowCount() = 0 !
原来,每当一个客户端程序与应用服务器建立一连接时,应用服务器即为此连接启动一独立的会话(SESSION),此会话具有如下特点: