如何解决从WCF迁移到gRPC,替换NetDataContractSerializer
从WCF迁移到gRPC的过程中,我正在处理NetDataContractSerializer,它用于在客户端对对象进行序列化并在服务器端对序列进行反序列化。客户端和服务器都使用通信中使用的类型共享同一DLL。
作为客户端应用程序更新过程的一部分,从服务器下载了共享DLL的实际版本,其中包含通信对象的新/更改/删除的定义。用于更新过程的基本通信对象永远不会改变。因此在更新过程中进行序列化/反序列化即可。
我想尽可能少地重写现有代码。我发现我可以用Newtonsoft的Json.NET序列化代替NetDataContractSerializer
,如下所示:
How to deserialize JSON to objects of the correct type,without having to define the type before hand?和此处https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm。
但我想知道是否:
- 总体上是否有更好的解决方案?
- 是否有一些基于.NET Framework 4.8的解决方案,并且可以在.NET 5.0中运行而无需引用第三方DLL?
- 是否有一些二进制序列化的替代方案,它对消息大小更友好/更快?对我来说,以可读形式发送消息不是强制性的。
解决方法
在“ 3”上,您换出序列化程序时,gRPC实际上非常开放。您不受protobuf的束缚,但是gRPC通常与protobuf一起使用。实际上,您实际上可以使用NetDataContractSerializer
,尽管出于某些原因,我会推荐:
“原因”很难解释,因为使用gRPC的经常人们使用protoc
来生成所有绑定,从而隐藏了所有细节(并使您与protobuf保持联系)
您可能在这里对protobuf-net.Grpc感兴趣,这是与gRPC绑定的另一种方式(使用Google或Microsoft传输-只是不同的绑定),并且与WCF 更具可比性。实际上,它甚至不让您借用WCF的接口/属性方法,尽管它并没有为您提供与WCF相同的功能奇偶校验(它基本上还是gRPC!)。
关于方法,请使用getting started guide is here。第一行设置上下文:
这是什么?
.NET Core 3+和.NET Framework 4.6.1+中的简单gRPC访问-想想WCF,但要通过gRPC
默认为protobuf-net,这是为代码优先方案设计的替代protobuf序列化程序,但是您可以替换序列化程序(全局或针对单个类型)。一个实现自定义序列化程序绑定的示例是provided here-请注意,该文件的最是一个很大的注释(实际的序列化程序代码的末尾是8行)。请阅读这些注释:它们在概念上是关于BinaryFormatter
的,但是它们中的每个词都同样适用于NetDataContractSerializer
。
我意识到您说过“无需引用第三方DLL”-在这种情况下,我的意思是肯定的:您可以有效地花几个星期来复制protobuf-net.Grpc正在为您做的最直接的显而易见的事情,但是...如果NuGet包只是坐在那里准备使用,那听起来并不会浪费很多时间。相关的API现已可以与Google / Microsoft软件包一起使用,但是要使所有内容协同工作,需要付出很多努力。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。