public static Byte[] GetDateDetail(string ip, int port, Byte[] received){
var encoding=Encoding.UTF8;
Utils.tuxputenv(string.Format("WSNADDR=//{0}:{1}", ip, port));
AppContext appContext = AppContext.tpinit(null);
//发送给tuxedo服务器的字符串参数
TypedBuffer sendBuffer = new TypedString(string.Format("Tuxedo Service {0}", encoding.GetString(received)));
//用于接收tuxedo返回的结果
TypedBuffer revBuffer = new TypedString("");
appContext.tpcall("TOUPPER",sendBuffer, ref revBuffer, 0);
string outPut = ((TypedString)revBuffer).GetString();
appContext.tpterm();
return encoding.GetBytes(outPut);}
我现在想直接将Bytes[]作为参数和返回结果,这样写为什么不对?
TypedCArray sendBuffer = new TypedCArray(1024);
sendBuffer.PutBytes(received);
//用于接收tuxedo返回的结果
TypedBuffer revBuffer = new TypedCArray (1024);
...
appContext.tpcall("TOUPPER",sendBuffer, ref revBuffer, 0);
....
return ((TypedCArray )revBuffer).GetBytes();
tpcall就异常了。不知何故啊,求解答。
因为TypedString类型比TypedCArray类型多了一个字节,用于表示字符串结束。
缓冲区类型不匹配的错误是由bea提供的.net客户端组件引发的,要绕过该错误,你可以使用IntPtr配合win32版的tpcall来实现无差别类型。