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无状态。
简单的开发步骤:
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无状态。
用心对待身边的一切,一切皆有可能!