第七章TUXEDO的客户端编程融金教育.docx

上传人:b****9 文档编号:29164158 上传时间:2023-07-20 格式:DOCX 页数:54 大小:283.71KB
下载 相关 举报
第七章TUXEDO的客户端编程融金教育.docx_第1页
第1页 / 共54页
第七章TUXEDO的客户端编程融金教育.docx_第2页
第2页 / 共54页
第七章TUXEDO的客户端编程融金教育.docx_第3页
第3页 / 共54页
第七章TUXEDO的客户端编程融金教育.docx_第4页
第4页 / 共54页
第七章TUXEDO的客户端编程融金教育.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

第七章TUXEDO的客户端编程融金教育.docx

《第七章TUXEDO的客户端编程融金教育.docx》由会员分享,可在线阅读,更多相关《第七章TUXEDO的客户端编程融金教育.docx(54页珍藏版)》请在冰豆网上搜索。

第七章TUXEDO的客户端编程融金教育.docx

第七章TUXEDO的客户端编程融金教育

第七章:

TUXEDO的客户端编程

7.1Tuxedo的客户端简介:

tuxedo有两种客户端:

本地客户端和远程客户端。

NATIVECLIENT(本地客户端):

是指与TUXEDO服务器在同一台机器上,不用通过网络

就可以访问到TUXEDO服务器的客户端。

WORSTATIONCLIENT(本地客户端):

是指要通过网络才可以访问到TUXEDO服务器的客户端。

 

下图为TUXEDO应用系统的客户端访问TUXEDO服务器上的服务的过程图。

 

说明:

WS(WorkstationExtensionProduct)

用于指TUXEDO产品的客户端部分

WSC

WorkstationClient

WSL(WorkstationListener)

TUXEDO系统自带的一个SERVER,它侦听一个指定的端口,WSC最初与该SERVER

建立连接

WSH(WorkstationHandler)

TUXEDO系统自带的一个SERVER,由它处理WSC与TUXEDOSERVER之间的通讯。

BulletinBoard(公告板)

TUXEDO把系统的配置保存在一个共享内存中,该共享内存称为公告板(BB)

BBL

TUXEDO的管理进程,主要对公告板等进行管理

WorkstationClient与TUXEDOSERVER建立连接的过程为:

1.WSC调用tpinit()或tpchkauth()

2.WSC采用在WSNADDR中指定的IP地址与服务端的WSL建立连接

3.WSL为该WSC指定一个WSH,并把该WSH的侦听端口返回给WSC

4.WSC采用返回的端口与指定的WSH建立连接,并与WSL断开连接,这之后WSC与TUXEDOSERVER之间的通讯通过WSH进行处理,与WSL无关。

5.tpinit()或tpchkauth()调用返回。

本地客户端与远程客户端的主要区别

1.本地客户端只能用C语言或COBAL语言编写,远程客户端可以用几乎所有的编程语言编

写。

2.在远程客户端所在的机器上要安装TUXEDO的客户端软件,并且在设置相应的环境变量;

在本地客户端上不用

3.用buildclient编译远程客户端程序时要加–W,编译本地客户端则不用

 

与远程客户端有关的配置:

1.在MACHINES中要配置MAXWSCLIENTS,即最多可以有多少个远程客户端同时连接

到该服务器上。

2.在SERVERS中要配置SERVER:

WSL

WSLSRVGRP="GROUP1"SRVID=1116

CLOPT="-A---n//192.168.120.113:

8888-m2-M5-x6"

CLOPT中可带的参数为:

CLOPT="[-A][servopts_options]---nnetaddr[-ddevice]

[-wWSHname][-ttimeout_factor][-TClient_timeout]

[-mminh][-Mmaxh][-xmpx_factor]

[-pminwshport][-Pmaxwshport]

[-Iinit_timeout][-ccompression_threshold]

[-kcompression_threshold]

[-zbits][-Zbits][-Hexternal_netaddr]

[-Nnetwork_timeout][-K{client|handler|both|none}]"

参数说明:

-nnetaddr:

WSL的侦听端口,远程客户端通过该端口与服务器建立连接

-mminh:

最少启动多少个WSH进程

-Mmaxh:

最多启动多少个WSH进程,默认值为MAXWSCLIENTS/m

-xmpx_factor:

每个WSH进程可以同时与多少个远程客户端建立连接

-ccompression_threshold

如果在远程客户端与服务器之间传送的数据包大小(单位为字节)超过-c指定的参

数,就自动进行数据压缩,

-TClient_timeout:

指定一个远程客户端的空闲时间,如果该远程客户端在client_timeout这么长的时间内没有做任何调用,WSH将断开与该远程客户端的连接。

单位为分钟,如果没有指点该参数,那么WSH永远不会自动断开远程客户端的连接

-ttimeout_factor:

指定远程客户端与WSH建立连接的时间,如果在-t指定的时间内还没有建立连接,那么连接将失败。

如果没有采用安全认证方式默认为3*SCANUNIT秒,。

如果采用安全认证方式默认为6*SCANUNIT秒,

[-pminwshport][-Pmaxwshport]:

指定WSH可以使用的端口范围:

如果远程客户端要跨越防火墙才能访问该TUXEDO应用系统,在WSL中要指定该参数,指定WSH可以使用的端口范围,并让防火墙允许访问这些端口。

如果不指定,TUXEDO会根据系统端口的使用情况进行分配,而分配的端口防火墙不允许通过,造成CLIENT无法调用TUXEDOSERVER。

如下面的设置指定WSH可用的端口范围为17010–17030。

WSLSRVGRP=GROUP1SRVID=1

CLOPT="-A---n//133.101.6.26:

17009-m10-M10-x10-p17010-P17030"

 

在远程客户端的机器上要设置的环境变量

TUXDIR(必需):

TUXEDO客户端在该机器上的安装目录

WSNADDR(必需):

远程客户端通过该IP地址与服务器建立连接,它的值为-n参数的值,

如在上面的配置中为:

SETWSNADDR=//192.168.120.113:

8888

WSTYPE(可选):

该客户端的类型,如果与服务器的类型一样,那么在它们之间进行数据

传送时不用进行编码解码工作。

其他不常用的环境变量可参考TUXEDO的联机文档。

 

客户端的编程模式:

 

在3层结构中,CLIENT是属与表示层,表示层主要处理与用户交互,它的功能可概括为:

1、提供应用的用户交互接口,即主要通过图形化的用户界面,取的用户的输入数据

2、与TUXEDO应用服务器建立连接

3、调用TUXEDO应用服务器上的服务(SERVICE),把客户端的输入参数放入输出缓冲区。

4、TUXEDO应用服务器调用相应的SERVICE处理客户端的请求,把处理结果通过客户端的输

入缓冲区返回给客户端。

客户端与服务端之间的通讯方式有以下几种:

1、同步调用:

2、异步调用

3、会话方式:

4、可靠消息队列

5、广播方式

6、发布/订阅

在下一章我们再具体介绍

 

7.2CLIENT的ATMI介绍

客户端通过调用TUXEDO提供的编程API(ATMI)来编写程序,下面介绍一些客户端主要的ATMI

与连接的建立与断开有关的ATMI

为了与TUXEDOSERVER建立连接,TUXEDOCLIENT要调用TPCHKAUTH()检查该TUXEDOSERVER所采用的安全方式,并根据得到的值做相应的处理,然后调用TPINIT()建立与TUXEDO的连接,在TUXEODSERVER的结果返回

之后,调用TPTERM()断开与TUXEDOSERVER的连接.

inttpchkauth()

描述:

检查该TUXEDOSERVER所采用的安全方式

参数:

返回值:

TPNOAUTH:

不需要认证

TPSYSAUTH:

需要口令认证

TPAPPSUTH:

需要口令认证,并且还需要应用级的认证或授权.

-1:

调用失败,错误号保存在全局变量tperrno中。

 

inttpinit(TPINIT*tpinfo)

描述:

与TUXEDOSERVER建立连接

参数:

TPINFO

返回值:

失败返回-1,错误号保存在全局变量tperrno中。

TPINIT结构体在atmi.h中的定义如下

structtpinfo_t{

charusrname[MAXTIDENT+2];/*clientusername*/

charcltname[MAXTIDENT+2];/*applicationclientname*/

charpasswd[MAXTIDENT+2];/*applicationpassword*/

chargrpname[MAXTIDENT+2];/*clientgroupname*/

longflags;/*initializationflags*/

longdatalen;/*lengthofappspecificdata*/

longdata;/*placeholderforappdata*/

};

typedefstructtpinfo_tTPINIT;

说明:

username,cltname,passwd,grpname,data,datalen用于安全认证中

flags:

用于定义以何种方式通知该客户端一个UNSOLICTEDMESSAGE的到来.它的值可以为:

TPU-SIG

TPU-DIP

TPU-IGN

TPSA-FASTPATH

TPSA-PROTECTED

inttpterm()

描述:

断开与TUXEDOSERVER建立连接

参数:

返回值:

失败返回-1,错误号保存在全局变量tperrno中。

 

与请求TUXEDOSERVER有关的ATMI

inttpcall(char*svc,char*idata,longilen,char**odata,long*olen,longflags)

描述:

客户端同步调用服务端的名为svc的SERVICE,

参数:

*svc:

SERVICE的名称

char*idata:

输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内

longilen:

输入缓冲区的长度

char**odata输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内

long*olen:

输出缓冲区的长度

longflags:

调用标志,由以下几个:

TPNOTRAN

如果调用svc的客户端当前在TRANSACTION方式下,那么svc不参与当前的TRANSACTION。

TPNOCHANGE

如果服务端返回的缓冲区类型与客户端定义的缓冲区(odata)类型不一致,默认情况下,odata会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该FLAG,那么当出现这种情况时,不进行缓冲区类型转换,并且会保错。

TPNOBLOCK

默认情况下,如果客户端有阻塞条件存在(如CLIENT的TCP/IP中的缓冲区满,磁盘I/O忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。

如果设置了TPNOBLOCK,当客户端有阻塞条件存在时,TPCALL()会立刻返回并报错.注意TPNOBLOCK只对发送请求时起作用,如果在接收服务端返回的结果时有阻塞条件存在,客户端会在那里等待,直到阻塞消除或超时出错

TPNOTIME

如果客户端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在TRANSACTION模式下,当到了事务的超时时间,还是会报超时错误并返回。

TPSIGRSTRT

如果在进行系统调用时,被信号中断,该系统调用会重新进行。

调用成功返回0,失败返回-1,错误号保存在全局变量tperrno中。

 

inttpacall(char*svc,char*data,longlen,longflags)

描述:

客户端异步调用服务端的名为svc的SERVICE,不等服务端返回结果,程序可继续往

下走,在某个地方调用tpgetrply()取的服务端的返回

参数:

char*svc,char*data,longlen参数的含义与tpcall()中的一样

flags可设置为:

TPNOTRAN,TPNOREPLY,TPNOBLOCKTPNOTIME,TPSIGRSTRT.

TPNOTRAN,TPNOBLOCKTPNOTIME,TPSIGRSTRT的含义与与tpcall()中的一样

TPNOREPLY:

调用tpacall()的客户端不想接收SEVER端的应答。

如果设置了

TPNOREPLY:

服务端不会给该客户端发送应答。

返回值:

失败返回-1,成功返回一个HANDLER,可作为tpgetrply的参数,用于取应答

inttpgetrply(int*cd,char**data,long*len,longflags)

描述:

取出服务端对tpacall()的应答。

参数:

cdtpacall()返回的HANDLER

char**data返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内

long*len:

返回缓冲区的长度

flags:

可以是:

TPNOBLOCK,TPNOTIME,TPSIGRSTRT,TPGETANY(不管cd的值,从服务

器的应答队列中取第一个可用的消息),TPNOCHANGE

返回值:

失败返回-1,错误号保存在全局变量tperrno中。

 

inttpcancel(inthandle)

描述:

如果当前的程序不处于事务模式中,取消对tpacall()的应答,如果处于事务模式

中,则不能取消对tpacall()的应答,该调用会失败.

参数:

tpacall()返回的HANDLER

返回值:

失败返回-1,错误号保存在全局变量tperrno中。

inttpgprio()

描述:

返回最近发送(tpcall(),tpacall())或接收(tpgetrply())的一个消息的优先级

参数:

返回值:

1-100消息的优先级,值越高,优先级越高

失败返回-1,错误号保存在全局变量tperrno中。

struct{

inthdl;/*handle*/

intpr;/*priority*/

}pa[SIZE];

for(i=0;i

/*Determineserviceanddataforrequest*/

pa[i].hdl=tpacall(Svc,buf,len,flags);

/*Savepriorityusedtosendrequest*/

pa[i].pr=tpgprio();

}

/*Useqsort(3)routinetosorthandlesinpriorityorder*/

qsort((char*)pa,requests,sizeof(pa[0]),cmpfcn);

for(i=0;i

tpgetrply(&pa[i].hdl,&rbufp,&rlen,rflags);

}

 

inttpsprio(intprio,longflags)

描述:

设置下一个要发送的消息的优先级

参数:

0-prio为相对值,设置下一个要发送的消息的优先级为现在的优先级加上prio

TPABSOLUTE:

prio为绝对值,设置下一个要发送的消息的优先级为prio

返回值:

失败返回-1,错误号保存在全局变量tperrno中。

 

与请求错误处理有关的ATMI

char*tpstrerror(inttperrno)

描述:

返回错误号为tperrno的错误描述

参数:

tperrno:

在atmi.h中定义的全局变量,用于标识错误号,类似于C中的errno

返回值:

失败返回NULL,成功返回错误号为tperrno的错误描述.

inttperrordetail(longflags)

描述:

返回当前进程或线程最近调用ATMI的出错的更详细的描述

参数:

设为0

返回值:

如果没有错误返回0,有错误返回错误描述号

 

char*tpstrerrordetail(interr,longflags)

描述:

返回错误描述号err的详细描述信息

参数:

err:

tperrordetail()的返回值,

flags:

设为0

返回值:

失败返回NULL,成功返回详细描述信息

 

7.3采用C语言编写TUXEDO的客户端程序

如果是采用C语言编写TUXEDO的客户端程序,可直接采用ATMI的函数,这些函数在atmi.h中定义.采用C语言编写TUXEDO的客户端的例子在此不列举,可参考simpapp,bankapp等例子.采用C语言编写客户端的编译是用buildclient命令进行的,它的使用格式如下:

buildclient[-C][-v][{-w|-rrmname}][-ooutfile][-ffirstfiles][-llastfiles]

参数说明:

-C:

编译用COBOL写的客户端

-v:

输出详细的编译信息

-w:

编译成REMOTECLIENT,如果不带该参数,那么将编译成NATIVECLIENT.

-o:

编译生成的可执行文件名

-f:

要编译的C文件名

-l:

指定要编译生成该可执行文件名要连接的其他库文件,如果有多个库文件要连接,它们之间用空格隔开.

-r:

指定该CLIENT要连接的RM

buildclient调用C或C++编译器来进行编译工作.所以客户端所在的机器要有C,C++编译器才能编译C客户端的程序.

如果是WINDOWS客户端,可安装VC,并在DOS环境下编译C客户端的程序.如果在安装VC时没有把自动设置环境变量的选项选上,VC中设置环境变量的文件在VC安装目录下的\bin\vcvars32.bat中,可手工执行它或在设置环境变量的文件中用CALL调用它,如:

calld:

\vs6\vc98\bin\vcvars32.bat

setTUXDIR=d:

\tuxedo65

setWSNADDR=//192.33.21.14:

9000

setAPPDIR=d:

\tuxdemo\conn

setPATH=%TUXDIR%\bin;%APPDIR%;%PATH%

setTUXCONFIG=%APPDIR%\tuxconfig

setFIELDTBLS=%APPDIR%\myfml

setFLDTBLDIR=%APPDIR%

如果是UNIX客户端,可安装CC,GCC等C或C++编译器.并在CC环境变量中设置所用的C编译器路径.

 

7.4采用VC编写TUXEDO客户端程序

采用VC编写客户端程序与采用C语言编写客户端的方式一样,但要对VC要进行一些设置才能进行编译,说明如下:

1.在/project/setting/link下的object/librarymodules中加上wtuxws32.lib,如图所示:

2.在tools/options/directories下的showdirecries中选includefiles,然后加上TUXEDO的INCLUDE目录,如图所示:

3.在tools/options/directories下的showdirecries中选libraryfiles,然后加上TUXEDO的LIB目录,如图所示:

 

7.5采用PB编写客户端程序

1.ATMI函数的声明

对PB,VB,DELPHI,VC等客户端,TUXEDO提供一个DLL编程接口,该DLL文件名为wtuxws32.dll,首先要在这些语言中声明所要用到的函数。

因为PB中没有指针,我们把它们声明为LONG型。

如果是双重指针,可声明为reflong.下面声明采用PB编写CLIENT段程序常用到的函数

functionintegertpinit(longtpinfo)library"wtuxws32.dll"

functionintegertpterm()LIBRARY"wtuxws32.dll"

functionlongtpalloc(stringbuftype,stringsubtype,longbufsize)LIBRARY"wtuxws32.dll"

functionlonglstrcpyPtr(longbuffer,stringstr)library"kernel32.dll"aliasforlstrcpy

functionlonglstrcpyStr(refstringstr,longbuffer)library"kernel32.dll"aliasforlstrcpy

functionintegertpcall(stringsvcname,longibuffer,longilen,reflongobuffer,reflongolen,longflags)library"wtuxws32.dll"

subroutinetpfree(longbuffer)library"wtuxws32.dll"

functionintegergettperrno()library"wtuxws32.dll"

functionstringtpstrerror(integererrno)library"wtuxws32.dll"

functionintegertperrordetail(longflag)library"wtuxws32.dll"

functionstringtpstrerrordetail(integererrno,longflag)library"wtuxws32.dll"

functionintegerfchgd32(longfbfr,longfldif,longocc,refdoublebuf,longflen)library"wtuxws32.dll"aliasforFchg32

functionintegerfchgl32(longfbfr,longfldif,longocc,reflongbuf,longflen)library"wtuxws32.dll"aliasforFchg32

functionintegerfchgs32(longfbfr,longfldif,longocc,stringbuf,longflen)library"wtuxws32.dll"aliasforFchg32

functionintegergetFerror32()library"wtuxws32.dll"aliasforgetFerror32

functionstringFstrerror32(integererrno)library"wtuxws32.dll"aliasforFstrerror32

fun

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1