remoting 框架图
 
简单的开发步骤:
1) 创建远程对象.
2) 创建server 宿主(host)
3) 创建调用client
第一步:创建远程对象
􀁺继承System.MarshalByRefObject
public class HelloServer : MarshalByRefObject
{
……
}

第二步:创建宿主应用程序
􀁺注册通道
􀂾内置通道:TCP,HTTP
􀁺注册服务器激活的远程对象(WellKnown)
􀂾Singleton,SingleCall
􀂾URL
􀁺运行宿主程序
第三步:建立客户端程序
􀁺注册通道
􀂾内置通道:TCP,HTTP
􀁺根据URL得到对象代理
􀁺使用代理调用远程对象

传递参数
􀁺传递简单类型
􀂾int,doulbe,string,enum……
􀁺传递可序列化的类型
􀂾ArrayList,Hashtable,DataSet……
􀁺传递自定义类型
 [Serializable]


􀂾**都是服务器激活的对象(WellKnown)
􀁺Singleton(单实例)
􀂾在服务器端只实例化一次。
􀂾以后每次调用都访问同一个实例。不论同一客
户端还是不同客户端。
􀂾可以维持状态。
􀁺SingleCalll(单调用)
􀂾每次调用都实例化新的实例。
􀂾更好的支持无状态编程模型。


Serialization VS. MarshalByRefObject
􀁺按值列集(Serialization)
􀂾得到远程对象的副本。
􀂾对副本的操作不影响远程对象。
􀂾不论远程对象是Singleton还是SingleCall

􀁺按引用列集( MarshalByRefObject )
􀂾得到远程对象引用,本地创建代理(Proxy)
􀂾通过(Proxy)对远程对象访问。
􀂾Singleton记录更改,SingleCall无状态。