2011-01-06 4 views
1

私は、それがInstanceContextModeをSingleに設定したRESTサービスを持つWCFサービスアプリケーションプロジェクトを持っています。それは私が定期的に通過し、登録をチェックするために使用したいタイマーを含んでいます。WCFサービスアプリケーションタイマー

誰かが最初にサービスを呼び出すまで、タイマーは起動しません。私が知りたいのは、ASP.NET Webサイトのようなタイムアウトのようなものがあります。その後、誰もそれをしばらく使っていないとIISがサービスを停止するか、タイマーは動作し続けます。

[ServiceContract] 
public interface IRegistrationService 
{ 
    [OperationContract, WebGet...] 
    void Register(...); 
} 

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class RegistrationService : IRegistrationService 
{ 
    private Timer timer; 
    public RegistrationService() 
    { 
     this.timer = new System.Timers.Timer(1000 * 60 * 5); 
     this.timer.Elapsed += OnTimerElapsed; 
     this.timer.Start(); 
    } 

    private void OnTimerElapsed(object sender, ElapsedEventArgs e) 
    { 
     // 
    } 
} 

答えて

1

ホストアプリケーションが起動して実行されるまで、実行され続けます。サービスがIISでホストされ、キープアライブが無効になっている場合、サービスは閉じられますが、winformsまたはWindowsサービスホストの場合、オブジェクトはアプリケーションが終了するまで保持されます。このオブジェクトを閉じるには、Disposableサービスを作成し、timerElapsedのときにクラスを破棄します。

+0

私のサービスはIISでホストされています。私はTSOHostと呼ばれるサードパーティ製のホスティングを使用しています。私はIIS7を使用していると思いますが、Keep-Aliveはデフォルトで有効になっていますが、ホスト設定ページでこの設定を覚えているとは思いません。ありがとう、私はこれが有効になっていることを確認します。 – sfsdfsdf