调用thrift报错:Invalid method name:‘XXXX’

时间:2025-03-22 17:52:56

使用thrift过程中失败,返回 Invalid method name 错误。网上查找资料,大致分为以下几点:
1、调用服务的IP、端口是否正确;
2、客户端调用的远程方法,服务端并未暴露出来,详见Thrift常见异常及原因分析
3、使用的传输层不一致导致的,客户端使用 TBufferedTransport ,服务端使用 TFramedTransport。
在判断上述无误后,找到问题:TMultiplexedProtocol 构造函数的服务名与实际类服务名不一致,EquipInfoRAoClient 类不在该 EquipMntAo 服务中,改为正确服务名即可。

boost::shared_ptr<TProtocol> protocol(pTBinaryProtocol);
TMultiplexedProtocol* pTMultiplexedProtocol =  new TMultiplexedProtocol(protocol,"EquipMntAo");
boost::shared_ptr<TMultiplexedProtocol> multiProtocol(pTMultiplexedProtocol);
EquipInfoRAoClient InfoClient(multiProtocol);