3

我正在尝试测试由于 .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."));
            }
        }

说真的 - 这就像墨菲定律。现在我需要测试修复程序,这件事不会破坏。

4

0 回答 0