私はWindows AzureでホストしているWCFサービスを持っています。このサーバーではタイマーを使用し、サーバーは何かを更新する必要があります。サーバーは、ASPアプリケーションとWPFアプリケーションで実装されています。WCFサーバーのタイマーは毎回複製されます
私はこのようなコンストラクタでタイマーを初期化する場合:
public Service1()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(WCFService_Elapsed);
timer.Interval = 10000;
timer.Enabled = true;
timer.Start();
}
タイマーが開始されますが、私はアプリケーションを再起動した場合(これはタイマーの複製を実行するため)タイマーは、より速く実行されます。プライベートプロパティはトリックをしないので、コンストラクタの上にタイマーを宣言します。
私はすでにServiceBaseクラスからのOnStartメソッドでそれを使用しようとした:
private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{
timer = new System.Timers.Timer();
timer.Elapsed += new System.Timers.ElapsedEventHandler(WCFService_Elapsed);
timer.Interval = 10000;
timer.Enabled = true;
timer.Start();
}
しかし、これが呼び出されることはありません取得...私はまた、静的なタイマーをテストしたが、それはどちらか開始されません。
私は間違っていますか?
WCFサービスは、「命」は、それが一度呼び出され、その後再び呼び出されるまで破棄されるものではありません。タイマーを置くのは本当に悪い場所です。定義すると、長い間生きている必要があります。あなたのサービスコードは私のWindowsサービスのように見えます。このコードが何で、どこに行くのか説明できますか? – nvoigt
WCFサービスに似た何かをアクティブにしておき、タイマーごとに機能する機能が必要な場合は、Windowsサービスを使用してみませんか? 短いチュートリアルです:https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx#Anchor_0 –
@nvoigtこれは学校プロジェクトです、それはWCFサービスである必要がありますそれはすべての論理がWCFサービスに入っています。 ASPとWPFのアプリケーションは、tamagotchiを表示し、食べ物などを与えるだけです.WCFService_Elapsedメソッドは、データベース内の10秒ごとに統計をランダム化します。このため、タマゴチチスは死ぬ可能性があり、あなたはそれらとやりとりする必要があります。 – Ferryzijl