前序
工作中往往會用到計時器,此篇中我們關注計時器的失效。由於在項目中webservice的負擔較輕,因此決定把計時器放入Web服務中。
實現
在web服務中放入一個任務類,其中放入一個計時器。在類初始化方法中啓動計時器。另外放一個持久類,類中專門放置一個靜態任務對象。
最後,在Global.asax.cs文件中的Application_Start方法中初始化持久對象。這樣就實現了一個計時器。
缺點
這個看似合理的計時器卻存在不理想的狀況-----最後,計時器停止了。有同學說是因爲內存回收了。那麼有沒有解決之道呢?
解決之道
在內存回收後,重啓計時器即可。我們在Application_End方法中叫醒自身。添加自身的web服務,並且打開自身服務中任意一個服務方法即可。
在這裏,我們不需要糾結雞生蛋還是蛋生雞的問題。因爲,雞蛋既然存在雞一定存在,他們同時產生,假名雞、蛋。
Config文件設置
<ISCSWebSerice.Properties.Settings>
<setting name="ISCSWebSerice_localService_HipisDeviceFault" serializeAs="String">
<value>http://localhost:83/XXXWebService/Y.asmx</value>
</setting>
</ISCSWebSerice.Properties.Settings>
上例中只需要修改端口號即可,因爲調用的是自身的web服務。