预计阅读时间:7分钟
Tuxedo历史文章如下,
《》
《》
《》
最近写了Tuxedo的监控程序,其中有一个逻辑,就是使用Tuxedo Client调用Server的服务,调用失败,ULOG中记录了,
000002.vm-app!?proc.81511.257603328.0: 07-02-2018: Tuxedo Version 9.1, 64-bit
000002.vm-app!?proc.81511.257603328.0: LIBWSC_CAT:1037: ERROR: Network message receive failure
000002.vm-app!?proc.81511.257603328.0: LIBWSC_CAT:1059: ERROR: WSL returns error on connection request
000002.vm-app!?proc.81511.257603328.0: LIBWSC_CAT:1055: ERROR: Unable to establish WSL connection
000002.vm-app!?proc.81511.257603328.0: LIBWSC_CAT:1027: ERROR: Unable to connect to WSH
000002.vm-app!?proc.81511.257603328.0: LIBWSC_CAT:1020: ERROR: Unable to obtain authentication level</code><p>
</p></pre>
</section>
Client逻辑比较简单,通过shell脚本调用,由于调用多套的环境,因此执行Client前,会先执行export WSNADDR的操作,指定不同环境的IP和端口,
<pre style="margin-top: 0px;margin-bottom: 0px;padding: 0px;background-image: none;background-color: initial;"><section class="mpa-template" mpa-preserve="t" style="white-space: normal;"><pre style="margin-top: 0px;margin-bottom: 0px;padding: 0px;background-image: none;background-color: initial;"><section class="mpa-template" mpa-preserve="t"><pre style="margin-top: 0px;margin-bottom: 0px;padding: 0px;background-image: none;background-color: initial;"><code class="hljs-default" style="margin-right: 0.15em;margin-left: 0.15em;padding: 6px;border-radius: 4px;font-size: 0.85em;background: rgb(40, 44, 52);color: rgb(171, 178, 191);display: block;overflow-x: auto;white-space: nowrap;">...
export WSNADDR=10.1.1.1:10001
./service_client
...
从错误提示看,是指客户端,没能建立和服务端WSL的连接,因此无法连接WSH,进而调用服务。
WSL是Tuxedo服务端的监听进程,L即是Listener,用来监听来自远程客户端的请求。当一笔Tuxedo交易开始时,远程客户端会首先与监听进程WSL建立连接,安全验证通过后,WSL就从WSH进程池里面分配给客户端一个空闲的WSH进程去处理客户端请求,H即是Handler。
WSH与workstation客户端的通信,以及与WSL的通信,都是使用专有的Tuxedo workstation协议。WSH不能理解telnet协议,所以尝试使用telnet到WSH端口都不会连通。
常见的WSL配置如下,
"WSL" SRVGRP="GRP" SRVID=1
CLOPT="-A -- -p 10002 -n //10.1.1.1:10001 -P 10003 -T 180"
RQPERM=0666 REPLYQ=N RPPERM=0666 MIN=1 MAX=1 CONV=N
SYSTEM_ACCESS=FASTPATH
MAXGEN=200 GRACE=86400 RESTART=Y
MINDISPATCHTHREADS=0 MAXDISPATCHTHREADS=1 THREADSTACKSIZE=0
SICACHEENTRIESMAX="500"
其中参数的说明,
[-p minwshport],WSH分配的起始端口
[-P maxwshport],WSH分配的结束端口
This pair of command line options can be used to specify the number range for port numbers available for use by WSHs associated with this listener server. The port numbers must be in the range between 0 and 65535. The default is 2048 for minwshport and 65535 for maxwshport.
[-T client_timeout],
客户端在与服务器端建立连接后,允许最大的空闲时间;
[-m number],
The minimum number of handlers that should be booted and always available. The default is 0.
[-M number]
The maximum number of handlers that can be booted. The default is the value of MAXWSCLIENTS for the machine being configured, divided by the multiplexing value (specified with -x)
[-x number]
The maximum number of clients that a WSH can multiplex at one time. The value must be greater than 0. The default is 10.
针对ULOG报错,常见的原因诸如:
WSNADDR配置的IP存在问题,导致不能找到WSH。
网络不通,导致client不能连接到WSH的机器上。
程序编译有问题,例如,没有使用-w参数编译client,但是却是使用WSNADDR寻找服务,导致出现这样的错误。若不用-w进行编译,则找本地服务。
这个问题中,网络端口通,排除2,编译正确,排除3,就只有1了,才发现是因为shell中,WSNADDR的格式错误了,IP前应该用//,
...
export WSNADDR=//10.1.1.1:10001
./service_client
...
改正之后,执行就正常了。因此,任何一个小环节,都可能成为执行出错的原因,谨慎书写。
如果您觉得本文有帮助,欢迎关注转发:bisal的个人杂货铺