gpt4 book ai didi

c# - 使用 WCF 在另一个 CLR 地址空间中执行代码并返回对象

转载 作者:太空狗 更新时间:2023-10-29 23:03:05 25 4
gpt4 key购买 nike

经过一些阅读,我了解到 .NET Remoting 是一个已弃用的 API,已被 WCF 取代。

我正在编写一个自动化框架,并希望在本地或某些远程计算机上引用具有类型/方法的 DLL,并在不考虑它们执行位置的情况下执行它们。

我认为远程处理是可行的方法,因为我猜想所有功能都在代理对象上执行,无论它是本地对象还是远程对象都无关紧要。

WCF 如何执行这种操作(如果有的话)或者 .NET Remoting 是可行的方法吗?

或者我没有想到的其他选择?

最佳答案

据我所知,无论在哪台机器上运行,都没有神奇的方法可以完全透明地调用方法,包括 .NET Remoting。但是,WCF 广泛使用代理,这些代理要么从 WSDL 文档自动生成,要么通过直接引用共享 dll 中的类型/接口(interface)来生成。

因此,您可以创建一个包含一些方法的共享 dll,添加一些 WCF 管道(即从您想要公开的方法/类型创建一个服务接口(interface)),然后决定是否在您的项目中直接/本地使用它们,或通过代理访问它们。这使得远程调用方法变得相当容易。但是请注意,您不能创建完全成熟的类来远程公开状态和功能,保存实际对象的内存不会远程共享,毕竟这只是一个“技巧”。

根据您的设置,您可以:

  • 使用命名管道进行机器内通信(最快)
  • 使用 TCP 进行 Intranet 通信(速度也相当快)
  • 使用 HTTP/HTTPS 进行互联网通信(最慢)

虽然调用远程方法很容易,包括发送/返回复杂的数据结构,但 WCF 在内部创建了一个完整的通信堆栈,可能包含许多逻辑,例如安全性、事务和可靠性。这意味着远程通信是有代价的,会给 CPU 和网络带来压力。

可以找到 WCF 入门 here .

如果您想要比内置通信选项更高的性能,您可能需要考虑使用类似 Google Protocol Buffers 的东西减少传输的数据量并降低 CPU 负载。

对于 C#,我知道有两种 Protocol Buffers 的实现,Protobuf CSharp乔恩双向飞碟和Protobuf-net马克·格拉维尔。

最后要说明的是:不,WCF 不会为您提供一种方法来完全抽象出类型/方法的位置。

关于c# - 使用 WCF 在另一个 CLR 地址空间中执行代码并返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5696428/

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