gpt4 book ai didi

c# - 在 C# 中在服务器和客户端之间传递自定义复杂对象

转载 作者:太空宇宙 更新时间:2023-11-03 22:10:51 25 4
gpt4 key购买 nike

我有一个桌面 C# 应用程序,我想将其拆分为两部分 - 服务器部分和客户端部分。我的应用程序已经分成两个非常独立的部分,它们通过交换一些(复杂的!)对象进行通信。

如果我想将我的应用程序的一部分放在某个 Web 服务器上,我应该使用哪种技术在服务器部分和客户端部分之间传递那些自定义的复杂对象?我在考虑 WCF,但是......我不确定 WCF 是否可以轻松处理(发送/接收)自定义对象(由许多其他自定义对象组成)。我不需要 WCF,因为我不打算向任何第三方提供我的服务,我不打算将我的客户端应用程序移植到其他操作系统...

这就是为什么我感到困惑并需要您的帮助:在我的案例中我应该使用哪种远程技术?

最佳答案

WCF 代表 Windows Communication Foundation。换句话说,它是关于一般的跨进程/机器通信,而不限于异构系统

关于 WCF 要记住的一件事是,尽管看起来如此,但实际上您根本没有传递对象 - 序列化程序使用对象来生成消息。在另一端,它将反序列化为一个独立的副本。与 COM 不同,您不会获得对发送方对象的引用。

这很重要的原因是因为如果复杂对象具有不可序列化的状态,例如套接字连接,那么这将不会到达接收方

此外,使用 DataContractSerializer(默认设置)除非您的对象使用 [Serializable] 属性进行注释,或者您使用 [DataContract] 和 [DataMember] 对类进行注释,否则您将只会发送公开公开的状态(通过公共(public)领域或属性(property))。

这不仅仅是 WCF 的问题;远程处理需要从 MarshalByRefObject 派生的对象或使用 [Serializable] 属性进行注释。构建分布式系统与构建共享相同内存地址空间的系统有很大不同。您必须仔细考虑如何定义分布式部分之间的边界,因为例如,大量的小调用会降低您的性能,而不是少数数据丰富的调用(尽管根据您的描述,这可能不是影响您的问题)

所以 WCF 可以处理任意复杂的对象图,但请记住以上关于序列化的要点

关于c# - 在 C# 中在服务器和客户端之间传递自定义复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com