2

我使用带有 boost.serialization 的 RCF(当我们已经使用原始版本时,为什么还要使用 RCF 的副本?)它工作正常,但是当服务器中抛出异常时,它没有正确传递给客户端。相反,我得到一个 RCF::SerializationException 引用archive_exception“类名太长”的说法。当我将协议更改为 BsText 时,例外是“未注册的类”。当我将协议更改为 SfBinary 时,它可以工作。我已经在服务器和客户端上注册了 RemoteException,如下所示:

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

我什至尝试boost::shared_ptr<RCF::RemoteException>在同一个测试中对 a 进行序列化和反序列化,并且它有效。

那么如何在不求助于 SF 的情况下正确地使 RCF 传递异常呢?

4

2 回答 2

2

这是 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);
于 2008-09-25T10:41:52.233 回答
0

根据 Jarl 它的工作原理,检查codeproject的问题并使用示例代码回答:

于 2008-09-17T17:29:55.310 回答