[转帖]     用C#开发TUXEDO客户端(三)_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4527 | 回复: 0   主题: [转帖]     用C#开发TUXEDO客户端(三)        下一篇 
guoyongwei
注册用户
等级:少校
经验:910
发帖:52
精华:6
注册:2013-3-11
状态:离线
发送短消息息给guoyongwei 加好友    发送短消息息给guoyongwei 发消息
发表于: IP:您无权察看 2013-3-15 10:50:40 | [全部帖] [楼主帖] 楼主

常用Tuxedo类与方法:

3.1 tpchkauth检查是否需要认证和认证的级别

int tpchkauth();


在调用tpinit()之前检查是否需要认证和认证的级别。

返回值:

TPNOAUTH:不需要认证;

TPSYSAUTH:系统认证,需要密码;

TPAPPAUTH:应用认证,需要密码和特殊应用数据;

当返回值为TPSYSAUTH和TPAPPAUTH时,我们必须使用tpalloc()分配一个TPINIT结构,在该结构中填入认证数据,然后用该结构作为参数调用tpinit()。

失败原因主要有:

协议错;

操作系统错;

tuxedo底层错。

3.2 tpinit初始化

在使用tuxedo其他服务之前,必须调用tpinit加入到应用中。

int tpinit(TPINIT *tpinfo);


参数说明:

tpinfo:指向TPINIT类型的指针。

TPINIT类型在atmi.h中有定义,如以下几个域:

char usrname [32]; (32 characters significant)
char cltname [32]; (32 characters significant)
char passwd [32]; (8 characters significant)
char grpname [32]; (32 characters significant)
long flags;
long datalen;
long data;


usrname:用户名或login名;

cltname:应用定义;

passwd:应用密码;

grpname:在事务中使用,必须在配置文件定义的组列表中;

flags:定义请求/通知类型和系统存取方法,其中TPU_SIG、TPU_DIP和TPU_IGN不能同时指定;TPSA_FASTPATH和TPSA_PROTECTED不能同时指定。有如下的值:

TPU_SIG:选择信号通知;

TPU_DIP:选择dip-in通知;

TPU_IGN:忽略通知;

TPSA_FASTPATH:选择fastpath方式系统存取;

TPSA_PROTECTED:选择protected方式系统存取;

datalen:应用特殊数据的长度;

data:应用特殊数据;

域flags的值覆盖系统的缺省定义,前提是在配置文件中没有指定NO_OVERRIDE。

如果参数使用(TPINIT*)NULL,则client使用系统缺省的通知设置和系统存取设置,若需要认证,则出错返回TPEPERM。

tpinit()调用失败返回-1,失败原因有:

参数错;

没有空间在BB;

没有权限;

协议错;

操作系统错;

tuxedo底层错。

示例:

TPINIT *tpinfo;
char password[9];
if ((tpinfo = (TPINIT *)tpalloc(“TPINIT”, NULL,
TPINITNEED(0))) == NULL) {
      (void)userlog(“unable to allocate TPINIT buffer”);
      exit(1);
}
(void)strcpy(tpinfo->passwd, password);
(void)strcpy(tpinfo->usrname, “Smith”);
(void)strcpy(tpinfo->cltname, “Teller”);
tpinfo->flags = (TPU_DIP TPSA_PROTECTED);
if (tpinit(tpinfo) == -1) {
      (void)userlog(“failed to join application”);
      tpfree((char*)tpinfo);
      exit(1);
}


3.3 tperm离开应用

使用tuxedo服务完毕,调用tpterm()离开应用。

int tpterm();


函数出错返回-1。

错误原因有:

协议错;

操作系统错;

tuxedo底层错。

3.4 tpacall发送异步请求

发送异步请求。

int tpacall(char *service, char *bufptr, long length,
long flags);


参数说明:

service:请求的service名(最大15个字符,以null结尾);

bufptr:请求发送的数据;

length:发送数据长度(只有CARRAY类型用,其他设为0);

flags:发送模式,有如下的值:

TPNOTRAN:该次调用不能在一个事务里;

TPNOREPLY:不需要回应(reply);

TPNOBLOCK:非阻塞;

TPNOTIME:不超时,一直等待;

TPSIGRSTRT:被信号中断的系统调用重启。

成功返回一个非负的描述符,该描述符可用于后续的tpgetrply调用,出错返回-1。

错误原因有:

参数错;

当前太多的tpacall处理存在,上限是50;

事务错;

超时(time-out);

3.5 tpgetrply接收异步回应数据

接收异步回应数据。

int tpgetrply(int *handle, char **bufpp, long *length,
long flags);


参数说明:

handle:tpacall返回的描述符;

bufpp:接收buffer的地址的地址,原buffer会自动调整;

length:接收的buffer的长度的地址;

flags:接收选项。有如下值:

TPNOBLOCK:非阻塞;

TPNOTIME:不超时,一直等待;

TPSIGRSTRT:被信号中断的系统调用重启;

TPGETANY:接收任何回应;

TPNOCHANGE:要求接收的回应与发送数据相同。

成功返回0,失败返回-1。

出错原因:

参数错;

错误的接收buffer类型;

超时;

其他错误;




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论