我写的有关Remoting文章的一些更改
随着对Remoting的逐步了解,很多技术在实现上会有一些变化,起初肤浅的认识会逐渐扎实起来。而自己以前在文中的很多结论会被自己不断的推翻。没有改变是不会有进步的,我喜欢这种改变!
我在《关于Remoting(续)》中这样写到:
对于Activated激活模式,不管是使用静态方法,还是使用CreateInstance()方法,都必须在客户端调用构造函数实例化对象。这样一来,在客户端我们提供的远程对象,就不可能只提供接口,而没有类的实现。
目前看来这个结论还是正确的。但是紧接着的结论就未免有些武断了。
所以对于Activated模式,我们必须在服务器和客户端提供两份完全相同的远程对象Dll,这个结果确实让人很沮丧。
真的是这样吗?其实这里我们可以用一个trick,来欺骗Remoting。既然是提供服务,Remoting传递的远程对象其实现的细节当然是放在服务器端。而要在客户端放对象的副本,不过是因为客户端必须调用构造函数,而采取的无奈之举。既然具体的实现是在服务器端,又为了能在客户端实例化,那么在客户端就实现这些好了。至于实现的细节,就不用管了。
那么远程对象有方法,服务器端提供方法实现,客户端就提供这个方法就OK了,至于里面的实现,你可以是抛出一个异常,或者return 一个null值;如果方法返回void,那么里面可以是空。关键是这个客户端类对象要有这个方法。这个方法的实现,其实和方法的声明差不多,所以我说是一个trick。方法如是,构造函数也如此。
还是用代码来说明这种“阴谋”,更直观:
服务器端:

















客户端:













比较客户端和服务器端,客户端的方法GetPersonInfo(),没有具体的实现细节,只是抛出了一个异常。或者直接写上语句return null,照样OK。
我们称客户端的这个类为远程对象的替代类。
在《Remoting的几个疑惑》文章因为cls的帮助,解决了这个困惑。但今天又有新的困惑了。问题真是层出不穷啊。相信不断地提出问题,又不断地解决问题,学习Remoting最终可以满师吧?
这些困惑在《Remoting的几个疑惑》文后的评论已经写了出来,这里就不再啰嗦了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)