异常未通过RCF正确传递(使用Boost.Serialization)

时间:2020-03-05 18:53:27  来源:igfitidea点击:

我将RCF与boost.serialization一起使用(为什么在我们已经使用原始格式的情况下为什么要使用RCF的副本?)它可以正常工作,但是当服务器中引发异常时,它不会正确地传递给客户端。相反,我得到一个RCF :: SerializationException引用一个" archive_exception",说"类名太长"。当我将协议更改为BsText时,例外是"未注册的类"。当我将协议更改为SfBinary时,它可以工作。
我已经在服务器和客户端上都这样注册了RemoteException:

BOOST_CLASS_VERSION(RCF::RemoteException, 0)
BOOST_CLASS_EXPORT(RCF::RemoteException)

我什至尝试在同一测试中对boost :: shared_ptr <RCF :: RemoteException>进行序列化和反序列化,并且可以正常工作。

那么,如何在不依靠SF的情况下使RCF正确传递异常呢?

解决方案

回答

根据Jarl的说法,请在codeproject中查看示例代码的问题和答案:

回答

这是Jarl在CodeProject上提供的补丁:

在RcfServer.cpp中,在定义RcfServer :: handleSession()的行之前(在792行附近),插入以下代码:

void serialize(SerializationProtocolOut & out, const RemoteException & e)
{
      serialize(out, std::auto_ptr<RemoteException>(new RemoteException(e)));
}

在Marshal.cpp的第37行附近,替换以下行:

ar & boost::serialization::make_nvp("Dummy", apt.get());

, 和

T *pt = apt.get();
ar & boost::serialization::make_nvp("Dummy", pt);