MSMQキューをポーリングし、受信メッセージをハンドラにディスパッチするWindowsサービスがあります。サービスをシャットダウンする必要があるときは、キューのReceiveを一定時間後にタイムアウトさせない限り、サービスはシャットダウンしません。私がWindowsサービスコントローラーがサービスを終了することはできません(&私もインストーラーをテストする必要があります)。実際には、キューに負荷がかかるため、これは問題にはなりません。しかし、私の開発環境では、私はイベントログに多数の偽のエラーエントリを取得します。例えば:私は受信機能の合法的な使用としてこれを見るため、WindowsイベントログのスプリアスMSMQタイムアウトエラー
while (!Signal)
{
try
{
var msg = Queue.Receive(TimeSpan.FromSeconds(1));
if (Signal)
{
EventLog.WriteEntry("LoggingHub",
"Terminating QueueReader for Path [" +
Queue.Path + "]", EventLogEntryType.Information);
return;
}
// etc etc etc
は私がエラー報告をオフにするための方法は、ありますか?
受信時にタイムアウトを設定するのがベストプラクティスと言えます。私は無限の待ち時間が常にエラー状態にうまく反応しないことによって問題を引き起こすことを発見しました。短いタイムアウトは、受信が動作不能になる可能性のある時間を制限します。 –