zoukankan      html  css  js  c++  java
  • 【Remoting-4】


    【服务对象三种激活方式的不同】
    【1】客户端激活方式
    【A】对象的创建,对象方法的执行都是在远程服务端。
    【B】服务端为每一个客户端创建其专属的对象,为这个客户提供服务,并且保存状态
    【C】可以从远程获取到方法执行的返回值
    【D】使用客户激活方式时候,远程对象在调用new操作时被创建[叙述了远程对象何时在服务端被创建]

    【2】服务端激活方式--Singleton
    【A】在服务端,服务对象的构造函数只会被调用一次
    【B】后继的请求都使用该对象进行服务。==>【有状态】的激活模式
    【C】多个客户端共享一个远程对象【的状态】。
    【D】在【客户端】即时使用new操作符,【服务端】也不会创建一个对象,
    只有在【客户端代理】中对象【代理对象】第一次调用方法时,对象在服务端才会被创建。
    ==>服务端只会创建一个服务对象

    【3】服务端激活-SingleCall
    【A】对象对每一次方法调用提供服务。
    ==>对于客户端的每一次方法调用,服务端都会创建一个对象为其服务,在方法执行完毕之后,在销毁对象。
    【B】SingleCall无法保存对象状态==>【无状态】激活模式。
    ==>如果保存对象的状态?==>解决方法:将对象状态存储在对象之外。
    【C】在【客户端】即时使用new操作符,【服务端】也不会创建一个对象,
    只有在【客户端代理】中对象【代理对象】调用方法时,对象在服务端才会被创建。
    ==>每一次调用方法,服务端都会创建一个服务对象

    【Remoting的传值封送】
    【1】需要将对象标志位可序列化
    【2】构建一个工厂类作为远程服务对象,然后将实际要传值封送到客户端的对象作为过程方法的返回值。
    【3】完全没有必要,如果要将远程对象传值封送到客户端,Remoting存在还有什么意义呢?

    【分离服务程序集元数据和代码实现】
    如何将【宿主应用程序域,Host Appdomain】和【客户应用程序域 Client Appdomain】的服务程序集分离?
    【1】使用接口分离服务程序集
    ==>将类型的元信息和类型的实现分离
    【注意】无法创建客户端激活对象
    【A】Activator.GetObject()方法只适用与服务端激活方法
    【B】Activator.CreateInstance()方法,作为参数的对象需要满足两个条件;(1)继承MBR,(2)服务端需要为此类型进行注册

    【2】使用空类分离服务程序集
    ==>服务程序集包含的代码量较少

    【3】使用SoapSuds.exe工具分离程序集
    ==>生成一个"空类"程序集

    【SoapSuds.exe】是.Net提供的一个工具,它允许客户端通过输入一个远程对象的Url,然后生成一个dll程序集文件,这个文件包含了在客户端穿件代理的全部元数据信息,
    但是不包含任何具体的实现==>【"空类"程序集】
    【如何使用SoapSuds.exe获取dll文件?】
    【1】服务启动后,激活远程对象。【注】
    【A】激活的方式只能是服务激活对象[SingleCall/Singleton]
    【B】使用Http通道,且消息格式器为SOAP格式器
    【C】生成dll程序集之后,无论服务端使用哪种类型的协议或者是格式,客户端都能访问到远程对象。【注】
    【2】客户端使用【vs命令提示】工具,使用soapsuds命令生成服务程序集
    soapsuds {-url:schemaUrl | -types:type1,assemblyname[,serviceEndpoint] [;type2,assemblyname][...]] | -is:schemafile | -ia:assemblyfile} [options]
    【==>soapsuds -url:serviceObjUrl?wsdl -oa:assemblyname.dll】

    【4】使用工厂方法分离
    ==>接口分离的一种变种
    【只适用于客户端激活方式,但是表现形式上又像服务端激活一样】
    【因为是工厂类,所以服务端激活对象的方式几乎都是采用Singleton】
    ==>解决了直接使用接口时无法创建客户端激活对象的问题

  • 相关阅读:
    tomcat配置环境变量
    Java实现简单的正则表达式匹配
    vi编辑器用法
    MyEclipse中自定义maven命令(添加maven 命令)
    dos窗口编译*.java文件 解决 java “错误:编码GBK 的不可映射字符”
    如何循环枚举类型
    Java枚举的小用法
    Java读取maven目录下的*.properties配置文件
    用MyEclipse将Maven Dependencies中的jar包导出
    MD5加密与base64编码
  • 原文地址:https://www.cnblogs.com/bea084100123/p/4824161.html
Copyright © 2011-2022 走看看