내 Windows 서비스는 상당한 캐시가있는 데이터 서버입니다. OnStop 서비스 중에 데이터를 잃어 버리지 않도록 캐시를 저장합니다. 잘 작동시스템 종료 중에 .NET Windows 서비스가 중단되었습니다.
this.serviceStatus.currentState = (int)State.SERVICE_STOP_PENDING;
this.serviceStatus.checkPoint = 1;
this.serviceStatus.waitHint = 60000;
SetServiceStatus(Process.GetCurrentProcess().Handle, ref this.serviceStatus);
: 캐시를 저장하는 타임 아웃에서 Windows 서비스 관리자를 방지하기 위해 그렇게 몇 분 정도 걸릴 수 있습니다 나는 SetServiceStatus에서 Win32 콜백을 사용합니다.
또한 CanShutdown을 true로 설정하고 OnShutdown을 추가하여 서비스가 시스템 종료 증명이되도록합니다. 여기서 나는 효과적으로 OnStop에서와 같은 일을합니다 :
protected override void OnShutdown()
{
this.OnStop();
base.OnShutdown();
}
그다지 좋지 않습니다. 시스템이 종료되면 캐시가 저장 될 때 "장치가 준비되지 않았습니다"라는 메시지가 나타납니다. 이것은 Windows가 중지/종료를 완료하기 전에 서비스를 중단한다는 것을 의미합니다. SetServiceStatus를 사용하면이를 방지 할 수 없습니다.
절약을 완료하려면 어떻게 시간이 오래 걸리며 재부팅을 지연합니까?
모든 의견을 환영합니다.
빠른 질문 - 일분 - waitHint은 60 초입니다. 그게 정말로 필요한거야? (당신은 몇 분이 필요하다고 말했습니다). –
난 그냥 여기에 손을 들고 왜 이런 식으로 행동 오래 캐시를 구현하는 질문을 제기하는 사람이 있어야합니다. 당신의 모든 디자인이 무효하다는 말은 아니에요. 그리고 그것은 프랑스의 아주 훌륭한 치즈 일 수도 있고, 아주 나쁜 것일 수도 있습니다. –
네 손을 들었어, 데이브. 나는 당신의 마음에 무엇이 있는지 알고 있습니다. 서비스가 그 양의 데이터를 메모리에 보관하지 않도록하십시오. 그러나 그것은 캐시의 아이디어입니다. 캐시는 여러 상황에서 저장되지만 시스템 종료 직전에 데이터로로드 될 수 있습니다. 그리고 서버는 거의 재부팅되지 않습니다. 그러나 나는 최악의 상황에 대비해야한다. –