C# Web服务单例对象问题
我在对web服务的第一个请求中创建了一个单例对象,并将其保存在内存中 这在最初几秒钟内工作正常。如果我在5分钟后发出请求,我可以看到singleton对象再次被创建?我的单例对象是否在x分钟后被处理 我怎样才能使我的对象的寿命永远延长C# Web服务单例对象问题,c#,asp.net,web-services,C#,Asp.net,Web Services,我在对web服务的第一个请求中创建了一个单例对象,并将其保存在内存中 这在最初几秒钟内工作正常。如果我在5分钟后发出请求,我可以看到singleton对象再次被创建?我的单例对象是否在x分钟后被处理 我怎样才能使我的对象的寿命永远延长 public sealed class Singleton { static ServerInstance instance = null; static readonly object padlock = new
public sealed class Singleton
{
static ServerInstance instance = null;
static readonly object padlock = new object();
Singleton() {
}
public static ServerInstance Instance {
get {
lock (padlock) {
if (instance == null) {
instance = new ServerInstance();
}
return instance;
}
}
}
~Singleton()
{
#if DEBUG
ExceptionFactory.Fatal("~Singleton() called!");
#endif
}
}
[WebMethod]
public string OnReceiveEvent(string objectXmlData, string objectType) {
if (!Singleton.Instance.initServerComplete) {
InitServer();
}
return Singleton.Instance.OnReceiveEvent(objectXmlData, objectType);
}
public void InitServer() {
if (!Singleton.Instance.initServerComplete) {
Singleton.Instance.InitServer();
Singleton.Instance.initServerComplete = true;
GC.KeepAlive(Singleton.Instance);
}
}
可能没有什么原因,但我主要考虑的是ASPNET进程重新链接。尝试从以下内容派生并重写:
阅读更多信息。我尝试了这个GC.KeepAlive(Singleton.Instance);同样,但删除我的帖子并没有像更新问题一样幸运,这也是我的第一个怀疑。问题是IIS ProcessModel IdleTimeout被设置为20分钟。我将其设置为0,现在一切正常。谢谢
public override Object InitializeLifetimeService()
{
ILease lease = (ILease)base.InitializeLifetimeService();
if (lease.CurrentState == LeaseState.Initial)
{
lease.InitialLeaseTime = TimeSpan.FromMinutes(100);
lease.SponsorshipTimeout = TimeSpan.FromMinutes(100);
lease.RenewOnCallTime = TimeSpan.FromSeconds(100);
}
return lease;
}