标题实在不好定义,是什么意思呢?我现在在做一个研究,就是原先的一个程序是用.NET Remoting进行远程通讯协议的,现在为了适应“广大客户关于WebService的强烈需求”,现在要修改为WebService方式。
稍微值得安慰的是:程序在设计的最初做了这种情况的假设,包含了一个通讯层,它在客户端包含一个连接对象,服务器端包含一个统一的服务调度程序,客户端总是返回一个服务的透明代理。开始人员在最上层调用看起来像这样的:
IEmployeeService service = Factory.GetService<IEmployeeService>();
- 要改成WebService方式,我必须在客户端也实现一个透明代理。
.NET默认建立的客户端是没有透明代理功能的。
关于透明代理的建立我参考了《A Taste of AOP from Solving Problems with OOP and Design Patterns (Part II)》一文,此高人2004年初就将AOP研究的透彻无比了。
- 利用反射统一调用方法
在服务器端,我先获取调用消息,WebService的定义如下:
[WebMethod]
public object Invoke(string serviceType, string method, string[] argumentTypes, object[] arguments) {
利用反射机制,我找到这个服务的实例,并调用他。有些人会很担心安全问题,因为这样客户端就可以写恶意的调用了,在现有的程序中是没有这个问题,因为我限制了serviceType只能是我们指定的已经授权的服务。
- 关于CallContext
在.NET Remoting中,CallContext是一个非常有用的东西,他可以帮助我将上下文传输到服务端,但我做了WebService的试验,非常遗憾,客户端设置的上下文在服务器端无法获取到。现在还在研究。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构