[C#]租约的Renew和“在主机应用程序域运行时始终”将对象保存在内存中

zhengyun_ustc 2004-08-06 03:45:55
对于租约问题,有一个最简单的办法,当然示情况而定了,也许你的服务需要这种简单做法。

我是看了:

http://cnblogs.com/xenogear/archive/2004/07/19/25609.aspx

他采用的办法是“在ShowDialog之前,得到租约,然后把这个租约传到FormLogin中,在FormLogin加一个Timer,检测到快超时的时候,就Renew租约”。

我的做法:

我呢,参考的是《.NET Remoting 体系结构评估 》上讲的一段话:

public class HostRequest : MarshalByRefObject
{
///
/// 忽略默认的对象租用行为,以便“在主机应用程序域运行时始终”将对象保存在内存中.
/// 这种机制将对象锁定到内存中,防止对象被回收,但只能在主机应用程序运行
/// 期间做到这样。
///
///
public override Object InitializeLifetimeService()
{
return null;
}
/// HostRequest 连接指定的页面,并将结果返回为stream输出参数。
/// 如果我们保留状态,无论是服务器激活的 Singleton 还是客户端激活的对象,
/// 我们可能都要参与生存期管理进程:对象租用。我们已经看到很小程度的参与,
/// 使用了一种简单(且有用)的方法,就是忽略 InitializeLifetimeService 方法。

如果不忽略 InitializeLifetimeService 方法:

如果不这么做的话,服务一开始用

m_Host = (HostRequest)ApplicationHost.CreateApplicationHost(
typeof(HostRequest),
"/ActionServletRedirect",
m_strPhysicalDir);

创建出了我自己的ApplicationHost,但是隔一段时间,比如2分钟,再次调用m_Host.CreateHtmlPage时发生异常,异常描述为:“Object </af81700d_4ca5_4ea5_b715_692a78a32f6f/ShTqv7YyYlWLUSZjIFfVzPjB_5.rem> has been disconnected or does not exist at the server.”。


堆栈信息如下:
excStack "\nServer stack trace: \n at System.Runtime.Remoting.Channels.ChannelServices.CheckDisconnectedOrCreateWellKnownObject(IMessage msg)\r\n at System.Runtime.Remoting.Channels.ChannelServices.SyncDispatchMessage(IMessage msg)\n\nException rethrown at [0]: \n at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)\r\n at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)\r\n at ActionServlet.HostRequest.CreateHtmlPage(String webPage, String query, TextWriter stream) in E:\\UM_BeijingMobile\\Coding\\PetGarden\\ActionServlet\\ActionServlet\\HostRequest.cs:line 18\r\n at ActionServlet.RedirectingCommand.Execute(SMSUpContext context) in e:\\um_beijingmobile\\coding\\petgarden\\actionservlet\\actionservlet\\redirectingcommand.cs:line 79" string
...全文
125 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengyun_ustc 2004-08-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhengyun_ustc/archive/2004/08/06/67051.aspx
代码转载自:https://pan.quark.cn/s/11d565366452 【USB转I2C/IIC适配器上位机应用程序】是一种针对I2C(Inter-Integrated Circuit)通信协议而构建的工具,其通过USB端口将个人计算机转变为能够与I2C设备进行交互的控制器。该适配器使开发人员与工程师能够便捷地对遵循I2C协议的芯片执行读取和写入任务,因此在硬件构建和测试阶段能够显著提升效率,对于核实I2C接口芯片的工作性能具有特别的价值。 I2C协议是由飞利浦(现NXP半导体)于1980年代初创立的一种双线式串行总线,其目的是用于连接微控制器及其他外围设备。该协议仅需两条信号线(SDA - 数据线,SCL - 时钟线)即可完成多设备间的通信,大幅度削减了电路板上的布线需求,从而降低了生产成本。I2C协议提供多种速度等级,涵盖标准模式(100kbps)、快速模式(400kbps)以及高速模式(3.4Mbps),旨在满足不同场景下的应用要求。 Ginkgo USB转I2C适配器是这项技术的具体应用实例,它提供了一个物理接口,用于将USB端口转换为I2C端口。适配器内部装配有一个微控制器单元,该单元负责处理从USB到I2C的信号转换,并且通过USB线路向计算机传输信息,同时接收来自计算机的指令以操控I2C总线。这种设计使用户无需具备深厚的硬件知识,仅需借助上位机软件即可实现对I2C设备的操控。 Ginkgo I2C Adapter Classic是与该适配器相配套的软件,通常包含以下几项核心功能: 1. 设备识别:自动检测并建立与USB转I2C适配器的连接。 2. 总线探查:扫描I2C总线上所连接的设备地址,有助于准确定位设备的位置。 3. 读写指令...
代码转载自:https://pan.quark.cn/s/4c053f9292d9 在Android应用程序的设计与实现过程,有时需要借助C或C++语言所具备的高性能特点,此时就必须借助Android Studio的NDK(Native Development Kit)工具来对C/C++代码进行编译,进而生成SO(Shared Object)动态链接库文件。本篇文章将详尽阐述在Android Studio环境下如何执行这一流程。 我们首先需要掌握Android Studio项目的基本组织架构。在Android Studio的`app`文件夹内,存在一个名为`src`的子文件夹,该文件夹通常包含了`main`以及其他相关源代码目录。在`main`文件夹,除了我们常见的`java`文件夹外,还设立了一个`jniLibs`文件夹,此文件夹专门用于存储SO文件。除此之外,还有一个`jni`文件夹,它是用来存放C/C++源代码的地方。 为了实现C/C++代码的编写与编译,我们必须在`build.gradle`文件配置NDK的支持。打开`app/build.gradle`文件,在`defaultConfig`部分嵌入以下内容: ```groovy externalNativeBuild { ndkBuild { path src/main/jni/Android.mk } } ``` 这段内容明确指示Android Studio去何处寻找`Android.mk`文件,该文件是一种Makefile的变体,主要用于设定编译规则和编译目标。 接下来,我们需要创建`Android.mk`文件。在这个文件,我们将明确指定源代码文件、编译选项以及要生成的库名称。一个基础的...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧