.NET简谈组件程序设计之(初识远程调用)

简介:

在.NET1.0版本出来的时候,要想进行远程调用基本上都是通过WebService的方式。而随着.NET2.0版本的出现,我们可以通过一个更加方便且高扩展性的框架来进行编写远程调用的程序,也就是我们都比较熟悉的.NetRemoting。

网上对.NetRemoting技术讲解的文章不计其数,但是很少有一本比较全面的、系统的学习书籍。我们都是从哪些零散的知识里慢慢摸索,效果不太理想。

今天我也来简单的介绍一下我理解的Remoting。不仔细研究一下还真不知道它的厉害,完全的托管平台、高扩展性、灵活性。框架完全采用面向接口编程,任何一个点我们都能提供自己的实现,信道、格式化器、租约、赞助方等等,系统都为我们预留了扩展的接口。[王清培版权所有,转载请给出署名]

在本人的“.NET简谈组件程序设计之(AppDomain应用程序域) ”一章中我简单的介绍了.NET托管运行时环境应用程序域(AppDomain)的概念。任何跨越应用程序域的访问.NET都将它视为远程调用,不管是在同一个进程中的两个应用程序域,还是一台PC上的两个进程中的两个应用程序域,还是跨越网络的两个应用程序域,.NET都通过代理的方式进行调用。

其实在一个进程中的两个应用程序域交互相对而言是简单的。当我们在默认的应用程序域中创建一个新的AppDomain对象,只需要实例化一个AppDomian然后通过MarshalByRefObject的CreateRefObject方法创建一个ObjRef将其新的应用程序域的代理所需要的所有信息带到客户端应用程序域中来,因为AppDomain也是派生与MarshalByRefObject类。后续的操作都是通过代理进行调用的,所有在域中创建的对象都不可能跑出来,只能被按值封送或者按引用封送。

同一个进程中的两个应用程序域共享一个物理进行空间,而线程是路径的物理执行单位,在CPU执行的时候才不管你是啥域,直接穿越。所以如果我们在同一个进程中用线程来进行处理的话,无需关心应用程序域的概念,但是这样有很多潜在的威胁,比如上下文安全、组件服务等都是要严格控制调用链的,在组件服务中都是通过上下文拦截来进行服务的调用,所以不提倡用线程来穿越域。详情请查看.NET企业服务相关技术。[王清培版权所有,转载请给出署名]

然而如果是跨进程的或者跨网络的远程调用就没这么简单了,当然这个不简单我们无需担心,NET为我们做好了。我们试着分析一下,如果要远程调用该会涉及哪些技术,这样便于我们有自主学习的能动力。

我们设想一下,.NET托管对象都宿主在物理进程中的,要想不同进程之间的通讯操作系统为我们提供了IPC技术,要想不同网络之间的进程通讯操作系统为我们提供了Socket。那么如果一个进程中的应用程序域想调用另一个进程中的应用程序域的对象必须通过物理进程的承载才行,也就是涉及到了IPC的调用。如果一个网络中的一个进程中的应用程序域想调用另一个网络中的进程中的应用程序域中的对象,就得通过操作系统为我们提供的Socket技术。[任何高层的应用均是建立在底层基础之上的]

同一台机器之间的调用:

不同机器之间的调用:

上面两幅图基本上就是对象之间的调用过程。看起来确实比较复杂,但是.NET为我们做了个很好的统一的远程处理框架.NetRemoting,我们只需要简单的配置就能很方便的进程远程调用。[王清培版权所有,转载请给出署名]

这篇文章是.NetRemoting的一个开篇铺垫吧,没涉及到多少Remoting的技术,但是这篇文章里面所讲的内容正是Remoting实现的类型,只有清楚的理解了这些关系之后我们才能很好的运用Remoting。








 本文转自 王清培 51CTO博客,原文链接:http://blog.51cto.com/wangqingpei557/667077,如需转载请自行联系原作者



相关文章
|
3月前
|
前端开发 C# 数据库
.NET中使用BootstrapBlazor组件库Table实操篇
.NET中使用BootstrapBlazor组件库Table实操篇
|
4月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
|
29天前
|
搜索推荐 API C#
.NET开源快速、强大、免费的电子表格组件
.NET开源快速、强大、免费的电子表格组件
|
4月前
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
32 0
|
5月前
|
SQL 数据库 开发工具
“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“
“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“
56 0
|
6月前
|
编解码 JSON 算法
一个支持.Net 7的WinForm开源UI组件框架
一个支持.Net 7的WinForm开源UI组件框架
89 0
|
6月前
|
开发工具 数据库 C++
0001net程序设计-net大学校园二手交易平台2
0001net程序设计-net大学校园二手交易平台
34 0
|
6月前
|
SQL 数据库 数据安全/隐私保护
0001net程序设计-net大学校园二手交易平台1
0001net程序设计-net大学校园二手交易平台
26 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
46 0
|
13天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
20 0