IPC反序列化异常仅在接收数据时?发送工作正常

Posted

技术标签:

【中文标题】IPC反序列化异常仅在接收数据时?发送工作正常【英文标题】:IPC deserialization exception only on recieving data? Sending works fine 【发布时间】:2021-02-16 10:32:18 【问题描述】:

我有一个问题,我真的无法解决。 我有两个程序,通过 IPC 使用 BinaryFormatting 进行通信。我将客户端和服务器类放在同一个程序集中,包括所有用于传输数据的类。

我不明白为什么当我尝试接收一个对象但发送一个对象时,我得到一个序列化异常并显示“未找到组件”。

因此,如果 IPC 客户端调用返回我的配置类的方法“Config GetConfig()”,则会引发异常。当我调用方法“SetConfig(Config config)”时,配置到达 IPC 服务器没有任何问题。

我已经尝试切换到 SoapFormatter 而不是 Binary 并尝试使用接口而不是类。所有的结果都是一样的。发送数据正常,获取数据会抛出反序列化异常。

谁能给我一个提示,我该如何解决这个问题?或者至少要寻找什么来解决它?

【问题讨论】:

【参考方案1】:

所以在问了这个问题一段时间后,我终于找到了问题和解决方案。 问题是,我的客户端是 COM-Component 的一部分,并且一个帖子为我指明了方向,binaryformatter 并不关心已经加载的程序集。看起来它总是试图从 AppDomain.CurrentDomain.BaseDirectory 解析程序集,在我的情况下,它是可执行文件的路径。

所以解决方案是绑定到 appdomain 中的 AssemblyResolve-Event 并从正确的目录解析程序集。

如果其他人有同样的问题,希望这会有所帮助。

【讨论】:

以上是关于IPC反序列化异常仅在接收数据时?发送工作正常的主要内容,如果未能解决你的问题,请参考以下文章

从 Electron Container IPC Channel 接收数据时,Change Detection 会间歇性工作

shiro的session信息放redis反序列化异常解决

使用 QTextStream 反序列化?

RPC之对象序列化/反序列化

2:如何反序迭代一个序列(字符串,列表,元组)

Winsock 仅在程序关闭时发送数据