首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从WCF迁移到gRPC,替换NetDataContractSerializer

从WCF迁移到gRPC,替换NetDataContractSerializer
EN

Stack Overflow用户
提问于 2020-08-14 08:29:28
回答 1查看 449关注 0票数 1

作为从WCF迁移到gRPC的一部分,我正在处理NetDataContractSerializer,它用于在客户端序列化对象,在服务器端进行反序列化。客户端和服务器与通信中使用的类型共享相同的DLL。

作为客户端应用程序更新过程的一部分,从服务器下载具有新/更改/删除通信对象定义的共享DLL的实际版本。用于更新过程的基本通信对象从未更改过。因此,在更新工作期间序列化/反序列化。

我希望尽可能少地重写现有代码。我发现我可以将NetDataContractSerializer替换为Newtonsoft的Json.NET序列化,如下所述:如何将JSON反序列化为正确类型的对象,而不必事先定义该类型?https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm

但我想知道:

  1. 总体上是否有更好的解决办法?
  2. 有没有一些基于什么是.NET框架4.8的解决方案,并且也将在.NET 5.0中工作而不需要引用第三方DLL?
  3. 是否有一些二进制序列化的选择,这将是更多的消息大小友好/更快?对我来说,以可读的形式发送消息并不是强制性的。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 08:37:27

在"3“上,gRPC实际上对您交换序列化程序非常开放;您不一定要使用protobuf,但是gRPC通常与protobuf一起使用。事实上,您实际上可以使用NetDataContractSerializer,尽管出于某些原因,我不会推荐它。

这方面的“如何”很难解释,因为在gRPC中,人们经常使用protoc来生成所有绑定,这隐藏了所有的细节(并将您与protobuf联系起来)。

您可能会对protobuf-net.Grpc感兴趣,它是绑定到gRPC的另一种方式(使用Google或Microsoft传输--只是绑定不同),而且与WCF相比要好得多。事实上,它甚至允许您借用WCF的接口/属性方法,尽管它没有提供与WCF类似的特性奇偶(从根本上说,它仍然是gRPC!)。

一个入门指南在这里。开头行设置上下文:

那是什么? .NET核心3+和.NET Framework 4.6.1+中的简单WCF访问--想想WCF,但通过gRPC

它默认为protobuf-net,它是为代码优先场景设计的另一种protobuf序列化程序,但是您可以替换序列化程序(全局的,或者针对单个类型)。实现自定义序列化程序绑定的一个示例是在此提供 --请注意,该文件的大多数是一个大型注释(实际序列化程序代码的末尾为8行)。请阅读这些评论:它们在名义上是关于BinaryFormatter的,但它们中的每一个字都同样适用于NetDataContractSerializer

我知道你说过“不需要引用第三方DLL”--在这种情况下,我的意思是:你可以花几个星期的时间来复制最直接显而易见的东西。that是为你做的,但是.如果NuGet包只是坐在那里准备使用,那么这听起来并不是很好地利用了您的时间。相关的API可以很容易地与Google/Microsoft软件包一起使用,但是在使所有东西一起工作的过程中需要大量的管道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63409248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档