【.Net Remoting-1】
【.NetRemoting】2015.09.16
【分布式应用程序】
应用程序分布在不同计算机上,通过网络来共同完成一项任务
C/S架构[模式]
【互操作性,Interoperability】又称【互用性】
是指不同的计算机系统、网络、操作系统和应用程序一起工作并共享信息的能力。
【.Net网络编程技术】
WCF,Web Service,Remoting,Socket
【应用程序域,AppDomian,Application Domain】
1.【缘由】
【1】.Net程序集需要运行在托管环境中
【2】操作系统并不了解托管代码
【3】需要有一个中介,既能为程序集提供托管环境,又能运行在非托管的操作系统的进程之内==>AppDomian;
【4】所有.Net程序集都运行在AppDomain
2.
【应用程序域是运行为它加载的程序集访问.Net CLR提供的服务的】
【.Net提供的运行时服务】
托管堆,GC,JIT编译器,程序集加载器等
3.
【1】可以将AppDomian类比为一个轻量级的进程,
【2】一个线程可以有多个AppDomian
【3】【默认的应用程序域】+【其他的应用程序域】
【4】应用程序域提供与进程类似的隔离性
4.创建AppDomian的优势
【进程创建一个AppDomian比操作系统创建一个进程的开销要小】
5.应用程序域的基本操作
【1】获取当前运行代码/程序集所在的AppDomian
AppDomian.CurrentDomain;
Thread.GetDomain();
【2】获取应用程序域的名称
FriendlyName
【3】创建新的应用程序域
AppDomian.CreareDomain("AppDomianName");
【4】在应用程序域中创建对象
【A】使用CreateInstanceAndUnWrap()方法;
【B】使用CreateInstance()方法创建对象
【5】判断是否是默认AppDomian
IsDefaultAppDomain();
【默认的程序域】
【1】线程创建时即被创建
【2】无法卸载,与所在的进程同生同灭
【在默认程序域中创建对象】
【在新建的应用程序域中创建对象】
对象从另外一个AppDomian中传递给本地AppDomian
需要对传递的对象进行序列化
【思考】
如何使用应用程序域动态的加载一个程序集
【代理,Proxy】
【1】在应用程序域中创建对象和使用构造函数创建对象的区别?
【构造函数】
在堆中直接创建一个对象,由变量名直接引用到对象
【在应用程序域中创建对象】
【1】在应用程序域中创建对象
【2】将对象序列化后封送【Marshaling】到本地/客户端应用程序域==>【远程对象】
【3】客户端应用程序域重新创建对象,还原对象状态,==>创建对象代理【Proxy】,【代理对象】
【4】客户端通过代理对象访问远程对象
【Proxy】提供了和远程对象完全相同的接口。
客户端基于远程对象的类型元数据来创建代理,因此客户端必须包含远程对象的类型元数据
【元数据】
类型得接口,包含名称,签名,不包括实现代码
【代理对象】newAppDomain中创建的对象
【远程对象】客户端应用程序域中创建的对象
【封送,Marshal】==>2中方式,传值,传引用
【传值封送,Marshal By Value】将对象传递到客户端
【传引用封送,Marshal By reference】将对象依旧留在远程AppDomian中,创建代理,通过代理访问远程对象
【传引用封送的方式】【有三种方式】
【1】客户端激活【Client activated】==>客户端激活对象,CAO,Client activated Object
【2】服务端激活Singleton【Service activated Singleton】
【3】服务端激活SingleCall【Service activated SingleCall】
【传引用封送】==>MBR对象
【MarshalByRefObject对象】
需要封送的对象必须要继承MBR类
【当一个对象继承自MBR之后,标志着该对象永远无法离开他所在的应用程序域】
【传引用封送和传值封送的优势】
对象大时候,传值封送的效率要低,传值封送需要将对象序列化,将整个对象封送到客户端,增加了网络负担。。。
【Remoting】
跨应用程序域的访问都属于Remoting。
【无论AppDomian是在同一个进程内,还是同一个主机不同进程内的AppDomian,还是不同计算机的进程】
【客户端】
发出请求的一端
【服务端】
提供类型的一端
【一个典型的Remoting程序】
【1】【服务程序集,提供服务的类型】
==>这些类型通常继承自MBR,[传引用封送的优势]
【2】【服务端应用程序】==>【宿主应用程序域】
==>提供服务程序集运行的环境【IIS,Windows服务,控制台程序,winform窗体程序等等】
【3】【客户端应用程序域】
==>向宿主应用程序域发出请求的应用程序域
【.Net Remoting-1】的更多相关文章
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【夯实PHP基础】PHP数组,字符串,对象等基础面面观
本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...
- 【Java学习系列】第3课--Java 高级教程
本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...
- 【夯实PHP基础】nginx php-fpm 输出php错误日志
本文地址 原文地址 分享提纲: 1.概述 2.解决办法(解决nginx下php-fpm不记录php错误日志) 1. 概述 nginx是一个web服务器,因此nginx的access日志只有对访问页面的 ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【初码干货】在Window Server 2016中使用Web Deploy方式发布.NET Web应用的重新梳理
在学习和工作的过程中,发现很多同事.朋友,在做.NET Web应用发布的时候,依然在走 生成-复制到服务器 这样的方式,稍微高级一点的,就是先发布到本地,再上传到服务器 这种方式不仅效率低下,而且不易 ...
- 【夯实PHP基础】PHP的反射机制
本文地址 分享提纲: 1. 介绍 2. 具体例子 2.1 创建Persion类 2.2 反射过程 2.3 反射后使用 1. 介绍 -- PHP5添加了一项新的功能:Reflection.这个功能使得p ...
- 【Java学习系列】第2课--Java语法及面向对象
本文地址 分享提纲: 1. Java程序特点 1.1 基本语法 1.2 字符串 1.3 变量 1.4 Java数组 1.5 Java枚举 1.6 Java修饰符 1.7 Java编译制定在制定目录 2 ...
随机推荐
- Shell脚本中单引号(‘)和双引号(“)的使用区别[转载]
shell可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符` 1. 单引号 ( '' ) # grep Susan phonebook Susan Go ...
- 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...
- Jasper_mainReport_excel html pdf 主报表中常用属性
jasper中,excel , html, pdf 一般可以使用相同的主报表和子报表.需要在主报表中添加不同格式对应的属性.导出不同格式的报表,编译器会将相应的属性应用到对应的报表格式中. 常用属性如 ...
- Shell脚本调试技术
http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟练掌握 ...
- MVC入门之.Net语法学习
本节中主要学习.Net框架性语法.开发者可以使用新语法提高编程的效率以及代码的运行效率:其本质都是“语法糖”,由编译器在编译时转成原始语法. u 自动属性 Auto-Implemented Prop ...
- TinyURL缩短网址服务 - Blog透视镜
TinyURL是个缩短网址服务的网站,提供1个短网址转向指定到长网址,像是杂志书籍中若有网址太长,也都会用TinyURL来缩短网址,例如本篇文章:http://blog.openyu.org/2014 ...
- Using ROWNUM in Oracle
ROWNUM is an Oracle pseudo column which numbers the rows in a result set. SELECT rownum, table_nameF ...
- Quartz.net Cron表达式
由7段构成:秒 分 时 日 月 星期 年(可选)"-" :表示范围 MON-WED表示星期一到星期三"," :表示列举 MON,WEB表示星期一和星期三&qu ...
- linux下能ping ip不能ping域名详解
今天在开发的同事来说,内网不能通过域名访问自己的服务器!然后做了下面的测试发现这样的问题: [root@itmop ~]# ping www.downcc.com ping: unknown host ...
- 给Eclipse安装Google app engine插件
1.一般的做法: 参考:https://developers.google.com/eclipse/docs/install-eclipse-4.3 2. 因为 上面的做法一直没有成功,改为下载离线包 ...