.NET Remoting Basic(3)-生存期租约
2010-08-26 22:44 Clingingboy 阅读(596) 评论(0) 编辑 收藏 举报用于管理远程对象的生命周期
1.初始化租约
使用LifetimeServices对象初始化
static void Main(string[] args) { Console.WriteLine ("ServerStartup.Main(): Server started"); LifetimeServices.LeaseManagerPollTime = TimeSpan.FromMilliseconds(10); HttpChannel chnl = new HttpChannel(1234); ChannelServices.RegisterChannel(chnl); RemotingConfiguration.RegisterWellKnownServiceType( typeof(MyRemoteFactory), "factory.soap", WellKnownObjectMode.Singleton); // the server will keep running until keypress. Console.ReadLine(); }
一旦设置,将无法更改
重写 MarshalByRefObject.InitializeLifetimeService()
public override object InitializeLifetimeService() { Console.WriteLine("MyRemoteObject.InitializeLifetimeService() called"); ILease lease = (ILease)base.InitializeLifetimeService(); if (lease.CurrentState == LeaseState.Initial) { lease.InitialLeaseTime = TimeSpan.FromMilliseconds(10); lease.SponsorshipTimeout = TimeSpan.FromMilliseconds(10); lease.RenewOnCallTime = TimeSpan.FromMilliseconds(10); } return lease; }
3.客户端测试
static void Main(string[] args) { HttpChannel channel = new HttpChannel(); ChannelServices.RegisterChannel(channel); Console.WriteLine("Acqu. Rem. Instance"); IRemoteFactory fact = (IRemoteFactory) Activator.GetObject( typeof(IRemoteFactory), "http://localhost:1234/factory.soap"); Console.WriteLine("Client.Main(): Acquiring object from factory"); IRemoteObject obj1 = fact.getNewInstance(); Console.WriteLine("Client.Main(): Sleeping one second"); System.Threading.Thread.Sleep(1000); Console.WriteLine("Client.Main(): Setting value"); try { obj1.setValue(42); } catch (Exception e) { Console.WriteLine("Client.Main(). EXCEPTION \n{0}",e.Message); } Console.ReadLine(); }
将显示对象过期,抛出错误信息.
4.续订租约
static void Main(string[] args) { //同上,略
IRemoteObject obj1 = fact.getNewInstance(); ((obj1 as MarshalByRefObject).GetLifetimeService() as ILease).Renew(TimeSpan.FromSeconds(1000)); Console.WriteLine("Client.Main(): Sleeping one second"); System.Threading.Thread.Sleep(1000); //略 }
测试结果,对象可以照常使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2009-08-26 Spring.NET学习笔记(6)-基础AOP