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