ibm midrange - C# Call QRCVDTAQ in AS400 hit Error code 3426 -
below error detail, pls help.
additional message information
message id . . . . . . : cpiad08 severity . . . . . . . : 40
message type . . . . . : diagnostic
date sent . . . . . . : 17/07/26 time sent . . . . . . : 14:30:08
message . . . . : host server communications error occurred on recv() -
length.
cause . . . . . : error code 3426 received while processing recv() - length function host server communications.
recovery . . . : see listed message(s) determine the
cause of error; if necessary, correct error , issue request
again.
bottom
press enter continue.
f3=exit f6=print f9=display message details f12=cancel
f21=select assistance level
display job log system: ltas02
job . . : qzhqssrv user . . : quser number . . . : 226264
job 226264/quser/qzhqssrv started on 17/07/24 @ 18:25:13 in subsystem qusrwrk in qsys. job entered system on 17/07/24 @ 18:25:13. user dpsgit client 10.51.180.171 connected server. connection remote socket reset socket. host server communications error occurred on recv() - length. job 226264/quser/qzhqssrv ended user dpsgit. target data queue program job ended abnormally. job 226264/quser/qzhqssrv ended on 17/07/26 @ 14:30:44; .006 seconds used; end code 50 . /* clp test9100cy*/ pgm parm(&dtaq &lib &msgdta &keys) dcl var(&dtaq) type(*char) len(10) dcl var(&lib) type(*char) len(10) dcl var(&lenq) type(*dec) len(5 0) value(1024) dcl var(&msgdta) type(*char) len(1024) dcl var(&wait) type(*dec) len(5 0) value(-1) dcl var(&order) type(*char) len(2) value('eq') dcl var(&keylen) type(*dec) len(3 0) value(20) dcl var(&keys) type(*char) len(20) dcl var(&sndid) type(*dec) len(3 0) value(0) dcl var(&snd) type(*char) len(10) value(' ') call pgm(qrcvdtaq) parm(&dtaq &lib &lenq &msgdta + &wait &order &keylen &keys &sndid &snd) end: rclrsc endpgm //c# source using system; using system.collections.generic; using system.linq; using system.text; using cwbx; using system.data.odbc; namespace as400testconsole { class qrcvdtaq { static void main(string[] args) { string connectionstringodbc = "driver={client access odbc driver (32-bit)};system=xxxxx;uid=dpsgit;pwd=abcd1234;"; getqueuescwbx(connectionstringodbc); console.readline(); } private static void getqueuescwbx(string connectionstring) { string result = string.empty; cwbx.stringconverter stringconverter = new cwbx.stringconverter(); cwbx.packedconverter packedconverter = new cwbx.packedconverter(); //define as400 system , connect as400system system = new as400system(); system.define("xxxxx"); system.userid = "xxxxx"; system.password = "abcd1234"; system.ipaddress = "10.144.151.205"; system.connect(cwbcoserviceenum.cwbcoservicedataqueues); //check connection if (system.isconnected(cwbcoserviceenum.cwbcoservicedataqueues) == 1) { //create program object , link system cwbx.program program = new cwbx.program(); program.libraryname = "xxxxxxxx"; program.programname = "test9100cy"; program.system = system; cwbx.dataqueue dq = new cwbx.dataqueue(); dq.system = system; dq.libraryname = "xxxxxxxx"; dq.queuename = "dqkey1"; string dqname = "dqkey1"; string lib = "xxxxxxxx"; string len = "x'01024f'"; string data = ""; string wait = "x'00005f'"; string order = "eq"; string keylen = "20"; string key = "00110736"; string sendlen = "0"; string send = ""; string strsql = "call xxxxxxxx.test9100cy ('dqkey1','xxxxxxxx','data','00110736')"; //create collection of parameters associated program programparameters parameters = new programparameters(); parameters.append("dtaq", cwbrcparametertypeenum.cwbrcinput, 10); parameters.append("lib", cwbrcparametertypeenum.cwbrcinput, 10); parameters.append("msgdta", cwbrcparametertypeenum.cwbrcoutput, 1024); parameters.append("keys", cwbrcparametertypeenum.cwbrcinout, 8); parameters["dtaq"].value = stringconverter.tobytes(dqname.padright(10, ' ')); parameters["lib"].value = stringconverter.tobytes(lib.padright(10, ' ')); packedconverter.digits = 5; packedconverter.decimalposition = 0; packedconverter.digits = 3; packedconverter.decimalposition = 0; parameters["keys"].value = stringconverter.tobytes(key.padright(20, ' ')); //finally call program try { program.call(parameters); result = stringconverter.frombytes(parameters["msgdta"].value); console.writeline(result); console.writeline(result); } catch (exception ex) { if (system.errors.count > 0) { foreach (cwbx.error error in system.errors) { //console.writeline(error.text); result = error.text; } } if (program.errors.count > 0) { foreach (cwbx.error error in program.errors) { //console.writeline(error.text); result += error.text + "\r\n"; } } console.writeline(result); console.writeline(ex.message); console.writeline(ex.stacktrace); } } } } }
is maximum size of entry in data queue bigger 1024?
if so, storage following &msgdta variable getting corrupted.
the 3rd parameter of qrcvdtaq output parameter. api sets parameter length of data puts in receiver. api ignores value put in parameter.
the 12th parameter in parameter can tell api size of receiver. if don't pass 12th parameter, , entry returned api longer 1024, storage after receiver corrupted. if storage happens 1 of other parameters api, api confused while running.
Comments
Post a Comment