我将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>进行序列化和反序列化,并且成功了。
那么,如何才能让RCF在不求助于SF的情况下正确地传递异常呢?
发布于 2008-09-25 10:41:52
这是由CodeProject的Jarl提供的补丁
在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);发布于 2008-09-17 17:29:55
根据Jarl it works的说法,请检查codeproject中的问题和答案,并使用示例代码:
https://stackoverflow.com/questions/62810
复制相似问题