Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WCF移动到gRPC,替换NetDataContractSerializer_C#_Wcf_Json.net_Grpc_Netdatacontractserializer - Fatal编程技术网

C# 从WCF移动到gRPC,替换NetDataContractSerializer

C# 从WCF移动到gRPC,替换NetDataContractSerializer,c#,wcf,json.net,grpc,netdatacontractserializer,C#,Wcf,Json.net,Grpc,Netdatacontractserializer,作为从WCF迁移到gRPC的一部分,我正在处理用于在客户端序列化对象和在服务器端反序列化的gRPC。客户端和服务器都与通信中使用的类型共享相同的DLL 作为客户端应用程序更新过程的一部分,将从服务器下载带有新的/更改的/删除的通信对象定义的共享DLL的实际版本。用于更新过程的基本通信对象从未更改。因此,在更新过程中序列化/反序列化是有效的 我希望尽可能少地重写现有代码。我发现我可以用Newtonsoft的Json.NET序列化来替换NetDataContractSerializer,如下所述:

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

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

我希望尽可能少地重写现有代码。我发现我可以用Newtonsoft的Json.NET序列化来替换
NetDataContractSerializer
,如下所述: 在这里

但我想知道:

  • 总的来说,有更好的解决方案吗
  • 是否有一些解决方案基于.NET framework 4.8的一部分,并且也将在.NET 5.0中工作,而无需参考第三方DLL
  • 是否有一些二进制序列化的替代方案可以更方便地/更快地显示消息大小?我不一定要以可读的形式发送消息
  • 在“3”中,gRPC实际上对您非常开放,可以替换序列化程序;您不必绑定protobuf,但gRPC通常与protobuf一起使用。事实上,您实际上可以使用
    NetDataContractSerializer
    ,尽管出于以下原因:我不推荐它

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

    您可能对protobuf-net.Grpc感兴趣,它是绑定到Grpc的另一种方式(使用Google或Microsoft transports-只是绑定不同),并且与WCF相比更具可比性。事实上,它甚至允许您借用WCF的接口/属性方法,尽管它没有为您提供与WCF类似的功能奇偶性(它基本上仍然是gRPC!)

    如何,一个。开始行设置上下文:

    这是怎么一回事? 在.NET Core 3+和.NET Framework 4.6.1+中实现简单的gRPC访问—考虑WCF,但不要考虑gRPC

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


    我知道你说过“不需要参考第三方DLL”-在这种情况下,我的意思是肯定的:你可以有效地花几个星期来复制protobuf-net.Grpc为你做的最明显的事情,但是。。。如果NuGet软件包只是简单地放在那里准备使用,那么这听起来并不是对时间的极大利用。Google/Microsoft软件包中随时可以使用相关的API,但要使所有内容协同工作,还需要很多管道。

    您好,谢谢您的回答。我对第三图书馆的恐惧来自于我的一些经历,当时我依赖于非商业性的或业余爱好的DLL,后来被抛弃了,我被它们困住了。另外,在使用MS库时,我对向后兼容性感到更舒适。@user2126375如果有帮助的话:protobuf-net(并扩展为:protobuf-net.Grpc)是,它的目的正是意味着如果我离开,其他人可以随时接管,但是:由您决定有关将WCF解决方案迁移到gRPC的信息,您可以参考以下链接:对于与WCF的NetDataContractSerializer相同的序列化体验,您可以使用或提及NewtonsoftJSON(但您必须处理int/float/guid反序列化问题)。来自2.2.85版本的MessagePack允许通过无类型序列化程序使用默认设置序列化/反序列化接口实现类,而不会引发异常。