我正在尝试测试由于.NET 4和MSMQ的已知问题而有时会出错的服务。请参阅此post
当然,现在我已经实现了代码来处理故障并重新启动服务我无法重现它(它很少发生)。有什么地方我可以强迫它进入故障状态(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."));
}
}
说真的 - 这就像墨菲定律。现在,我需要测试修复,这件事情不会破坏。