.NET 4 と MSMQ の既知の問題が原因でエラーが発生するサービスをテストしようとしています。この投稿を参照してください
もちろん、障害を処理してサービスを再起動するコードを実装したので、それを再現することはできません (めったに起こりません)。強制的にフォルト状態にすることができる場所はありますか ( CommunicationState.Faulted )。ブログ投稿から基本的にコピーされたコードをテストする必要があります。ログを少し追加し、サービスに関する情報を保持するためのキーと値のペアを追加します。
void FaultedServiceHandler(object sender, EventArgs e)
{
Logger.Error(new Exception(string.Format("ServiceHost received a service fault event from {0}", sender)));
var faultedServices = _services.Where(t => t.Value.Host != null && t.Value.Host.State == CommunicationState.Faulted).ToList();
foreach (var serviceKvp in faultedServices)
{
serviceKvp.Value.Host.Closed -= new EventHandler(ServiceClosedEventHandler);
serviceKvp.Value.Host.Abort();
serviceKvp.Value.Host = null;
// Now open up a new instance of this service.
ServiceStartup(serviceKvp.Value.Definition);
LogEvent(String.Format("Host {0} was found in a faulted state.", serviceKvp.Key));
Logger.Error(new Exception("FaultedServiceHandler: Aborting " + serviceKvp.Key + " Host and Restarting."));
}
}
真剣に、これはマーフィーの法則のようなものです。修正をテストする必要があるので、問題はありません。