W naszej usłudze przepływu pracy WF4 staramy się być maksymalnie odporni. Jedną z rzeczy, które robimy, jest rejestrowanie błędów wewnątrz HandleError i ProvideFault (IErrorhandler). Państwa dokumentacja wyraźnie, że HandleError byłby właściwym miejscem, aby wykonać logowania, ale widzę jakieś dziwne rzeczy dzieją się:HandleError vs. ProvideFault niespójności w usłudze przepływu pracy, jak sobie z nią poradzić?
widzę pewne błędy, które tylko powodują ProvideFault, ale nigdy HandleError jednym przykładzie wynosił:
System.NullReferenceException: Odniesienie do obiektu nie jest ustawione na wystąpienie obiektu. na System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult.GetInstance() na System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult..ctor
Istnieją również pewne błędy, które tylko powodują HandleError , ale nigdy ProvideFault, jeden przykład:
System.ServiceModel.CommunicationException: Wystąpił błąd odczytu z rury: Rura została zakończona. (109, 0x6d). w System.ServiceModel.Channels.PipeConnection.Read (bajty [] bufor Int32 offset, wielkość Int32, przekroczenie czasu TimeSpan) w System.ServiceModel.Channels.SessionConnectionReader.Receive (TimeSpan czasu oczekiwania)
Wreszcie istnieją błędy, które wyzwalają zarówno, najpierw ProvideFault a następnie HandleError (na wątek tła)
Jeśli to możliwe, chcę zalogować się odpowiedni komunikat przychodzący, too. Czynię to z OperationContext.Current.RequestContext.RequestMessage.ToString() To zazwyczaj działa tylko w ProvideFault w HandleError nie mają RequestContext więcej
Więc mój wniosek był, aby rejestrować wszystkie błędy, muszę zalogować się w obu metodach. Ale to prowadzi do wielu zduplikowanych wpisów w dzienniku, z powodu 3. ..
Moje bieżące obejście polegało na "zapamiętywaniu" ostatniego zalogowanego wyjątku od ProvideFault i ignorowaniu go, jeśli ten sam wyjątek wchodzi do HandleError. Wygląda na to, że nie jest dla mnie zbyt czysty.
Czy ktokolwiek jest lepszym, niezawodnym sposobem rejestrowania wszystkie błędy, które mogą się zdarzyć w ramach usługi WF?
Proszę nie wskazywać na Logging exceptions in WCF with IErrorHandler inside HandleError or ProvideFault?, ponieważ nie zapewnia to żadnej pomocy.