【问题标题】:Exceptions not passed correctly thru RCF (using Boost.Serialization)异常未通过 RCF 正确传递(使用 Boost.Serialization)
【发布时间】:2010-09-08 22:25:39
【问题描述】:

我使用带有 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> 进行序列化和反序列化,它确实有效。

那么我怎样才能在不诉诸SF的情况下正确地让RCF通过异常呢?

【问题讨论】:

    标签: c++ boost-serialization rcf


    【解决方案1】:

    这是 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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-09-25
        • 1970-01-01
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 2017-04-26
        • 2014-02-19
        相关资源
        最近更新 更多