使用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);