首页 新闻 会员 周边

tuxedo调用问题

0
悬赏园豆:15 [已解决问题] 解决于 2010-11-04 19:21

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就异常了。不知何故啊,求解答。

高凡凡高的主页 高凡凡高 | 初学一级 | 园豆:95
提问于:2010-11-03 10:05
< >
分享
最佳答案
0

因为TypedString类型比TypedCArray类型多了一个字节,用于表示字符串结束。

缓冲区类型不匹配的错误是由bea提供的.net客户端组件引发的,要绕过该错误,你可以使用IntPtr配合win32版的tpcall来实现无差别类型。

收获园豆:15
Launcher | 高人七级 |园豆:45045 | 2010-11-03 14:52
好像这里只有你用过这个,哎。你说的我去试试看吧,官方文档写的也非常的不详细。方便留下邮件联系吗?实在是找不到人问
高凡凡高 | 园豆:95 (初学一级) | 2010-11-04 13:37
@wisenwu:wl@txsec.com.你可以把libwscdnet.dll反编译后,查看它是如何实现的.如果你懂C/C++的话,直接看它提供的C/C++示例代码.
Launcher | 园豆:45045 (高人七级) | 2010-11-04 15:14
谢谢了。以后有问题了邮箱请教你。
高凡凡高 | 园豆:95 (初学一级) | 2010-11-04 19:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册