我对奥尔良有点陌生,目前正在使用它来处理传入的事件,这些事件通过奥尔良流传递到grains。Orleans客户端发送到类型为"EventData"的流对象,这些对象在我们使用的单独nuget中实现。在Orleans思洛存储器方面,我们有一个使用ImplicitStreamSubscription订阅该流的grain。颗粒接口不使用"EventData",实际上流订阅是该颗粒的主要入口点。
我遇到的问题是,当客户端尝试将"EventData"实例发送到流时,我会返回一个关于"EventData"类缺少序列化程序的异常。将"EventData"类标记为[Serializable]解决了这个问题,但理解没有使用Orleans的内置专用序列化程序。
如何让Orleans为"EventData"使用内置生成的序列化程序?
根据文档,似乎必须将orleans模板nuget添加到"EventData"程序集项目中。真的吗?由于它是一个在Orleans以外的运行时环境中使用的nuget,所以我想保留它,而不参考Orleans。
答案如下:https://github.com/dotnet/orleans/issues/1654
需要将以下属性添加到晶粒接口代码中:
[程序集:KnowType(类型为(EventData))][assembly:KnownAssembly(类型为(EventData))]