zoukankan      html  css  js  c++  java
  • 【.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】【客户端应用程序域】
    ==>向宿主应用程序域发出请求的应用程序域

  • 相关阅读:
    windows10+vs2010+lwip+Wireshark+winpcap环境变量配置
    Anaconda中安装了Libtiff模块,但运行程序显示ModuleNotFoundError: No module named 'libtiff'
    利用Anaconda软件安装opencv模块
    Windows10+Anaconda+PyTorch(cpu版本)环境搭建
    Spyder中报错: Check failed: PyBfloat16_Type.tp_base != nullptr
    Keras中图像维度介绍
    机器学习2-7
    LeetCode637. 二叉树的层平均值
    LeetCode617. 合并二叉树
    LeetCode590. N叉树的后序遍历
  • 原文地址:https://www.cnblogs.com/bea084100123/p/4815194.html
Copyright © 2011-2022 走看看