整体:
Remoting的激活方式有两种客户端激活和服务端激活,顾名思义服务端激活就是服务端负责维护远程服务对象的创建与销毁而客户端激活则是客户端负责远程对象的创建与激活。在服务端激活的模式下根据请求来建立对象,对所有请求建立一个对象的就是 Singleton而对每次请求都分别建立对象的叫做SingleCall。SingleCall建立的对象系统自己回收没有生命周期之说而对于Singleton你可以通过编程或是配置来管理远程服务对象的生命周期。在客户端激活的模式下远程服务端会为每个客户端建立远程对象客户端持有这个远程对象的引用。总之客户端激活的时间是在客户端请求的时候,而服务端激活远程对象的时间是在调用对象方法的时候。
1:SingleCall 与 Singleton
结论:SingleCall在每次用户调用服务端代理的时候服务端会为每次请求构造一个新的对象而Singleton则对所有请求建立一个对象。
论证:我们可以建立一个服务端对象并使其拥有一个整型变量,在其构造函数的时候赋值为1然后在方法中将值加1放回。对于SingleCall每次请求永远为2而Singleton则会随着请求次数增加而增加。
代码示意:
public class Test : MarshalByRefObject, ITest
{
private int Num = 0;
public Test()
{
Num = 1;
}
#region ITest 成员
public string GetUserName(string Name)
{
//return TestSingle.GetInstance().GetUserName(Name);
return string.Format("UserName:{0}", Name);
}
public int Cout()
{
//return TestSingle.GetInstance().Cout();
Num++;
return Num;
}
#endregion
}
{
private int Num = 0;
public Test()
{
Num = 1;
}
#region ITest 成员
public string GetUserName(string Name)
{
//return TestSingle.GetInstance().GetUserName(Name);
return string.Format("UserName:{0}", Name);
}
public int Cout()
{
//return TestSingle.GetInstance().Cout();
Num++;
return Num;
}
#endregion
}