/// <summary> /// get back the zombie message, replay it and delete the zombie orchestration /// </summary> /// <param name="serviceInstanceId"></param> public static void ReplayZombieMessage(Guid serviceInstanceId) { Boolean deleteOrchestrationAction = false; //initialize WMI WmiLogic wmiAccess = new WmiLogic(); //Initialize artifact list BTArtifactLogic btArtifact = new BTArtifactLogic(); //retrieve all zombie message id wmiAccess.GetZombieMessage(serviceInstanceId); // Loop over the returned messages from the query if (wmiAccess.MessageFound) { //need to destroy the orchestration after deleteOrchestrationAction = true; LogHelper.WriteInfo(String.Format(ResourceLogic.GetString(ResourceKeyName.ZombieFound), serviceInstanceId)); //saving all messages SaveMessages(serviceInstanceId, wmiAccess.ListMessageId, btArtifact); } else { LogHelper.WriteInfo(String.Format(ResourceLogic.GetString(ResourceKeyName.NoZombieFound), serviceInstanceId)); } //Now terminate the current orchestration if (deleteOrchestrationAction) { LogHelper.WriteInfo(String.Format(ResourceLogic.GetString(ResourceKeyName.DeleteZombieOrchestration))); WmiLogic.TerminateOrchestration(serviceInstanceId); } }
/// <summary> /// save all message in the selected dump layer /// </summary> /// <param name="ServiceInstanceID"></param> /// <param name="MessagesID"></param> /// <param name="btArtifact"></param> private static void SaveMessages(Guid ServiceInstanceID, IEnumerable <Guid> MessagesID, BTArtifactLogic btArtifact) { LogHelper.WriteInfo(ResourceLogic.GetString(ResourceKeyName.MessageSaving)); //retrieve the right layer ITransportLayer accessLayer = ConfigParameter.GettingTheRightLayer(); foreach (Guid gu in MessagesID) { //retrieving the message String sMessage = btArtifact.GetMessageBodyByMessageId(gu, ServiceInstanceID); //save the message accessLayer.SendMessage(sMessage, gu); //updatecounter PerfCounterAsync.UpdateStatistic(); } LogHelper.WriteInfo(ResourceLogic.GetString(ResourceKeyName.MessageSaved)); }