System.Timers.Timer インスタンスを使用して定期的なタスクを実行する VB.NET で記述された Windows サービスがあります。エンティティ フレームワーク 4.3.1 を使用して、.NET から .NET 4.5 に移行しました。タイマーの「経過」イベント ハンドラーは、エンティティ フレームワークを使用しない限り、通常どおり起動します。エンティティ フレームワークを使用すると、イベント ハンドラが起動しません。ただ、発火しません。例外はスローされず、イベント ログ メッセージも何も表示されません。これは、.NET 4 バージョンを使用している間は発生しませんでした。それについて何か提案はありますか?
Dim testTimer As New System.Timers.Timer
Protected Overrides Sub OnStart(ByVal args() As String)
Try
testTimer.Interval = 2 * 1000 * 60
AddHandler testTimer.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf TestTimerMethod)
testTimer.Enabled = True
Catch ex As Exception
'A method logging the respective exception
LogException(ex)
End Try
End Sub
Protected Sub TestTimerMethod()
Try
testTimer.Enabled = False
UtilitiesProvider.GetUtilitiesProvider.LogWriter.Write("Start of method")
'If I remove the next line, the event handler is fired as it should be...
Dim dbContext As New DASTADbContext
'mock some time consuming tasks
Dim i = 0
Catch ex As Exception
'Log the exception
UtilitiesProvider.GetUtilitiesProvider.LogException(ex)
Finally
testTimer.Enabled = True
End Try
End Sub
次の点に注意してください。 1. ソリューション全体を x86 モードでビルドします。これが関連しているかどうかはわかりません。2. VS2012 を使用してビルドします 3. ログ メッセージを使用し、それぞれのプロセスに接続するサービス全体をデバッグすることによって、上記のシナリオを確認しました 4. ランタイム バージョン .NET 4 用にビルドされた Entity Framework 4.3.1 を参照しています
よろしくお願いします、パンテリス・ナツィアヴァス
編集:これはまだ問題が残っていますが、誰が責任を負っているのかがわかったと思います。説明のつかない理由により、Windows サービス セットアップ プロジェクトの作成に使用された Installshield Limited Edition が期待どおりに動作しませんでした。Windows サービスのプライマリ出力を使用してセットアップ プロジェクトを作成すると、説明のつかない理由で、Installshield LE が Entity Framework 4 を使用する古い、現在は使用されていない DLL への参照を追加しました。同時にEntity Framework 4.3。VS2012、.NET 4.5、および InstallShield LE に同時に切り替えました。したがって、.NET 4.5 が原因であると誤解していました。これはまだバグと見なされるべきだと思います。なぜなら、私は例外や何か間違ったことをしていることを示す何かを受け取ったことがないからです。タイマー、