diff --git a/ENI2/ENI2.csproj b/ENI2/ENI2.csproj index c0ecaaf3..97eceeb7 100644 --- a/ENI2/ENI2.csproj +++ b/ENI2/ENI2.csproj @@ -36,7 +36,7 @@ 5.4.0.0 true publish.html - 5 + 6 7.9.0.%2a false true diff --git a/SendNSWMessageService/NSWSendService.cs b/SendNSWMessageService/NSWSendService.cs index 8ef4d838..8d2e3b58 100644 --- a/SendNSWMessageService/NSWSendService.cs +++ b/SendNSWMessageService/NSWSendService.cs @@ -270,9 +270,11 @@ namespace SendNSWMessageService } // external processing for HIS-Nord - bsmd.hisnord.transmitter.CallTransmitter(); - bsmd.hisnord.Request.ReadResponseFiles(); - bsmd.hisnord.Response.ReadAnswers(); + if (bsmd.hisnord.transmitter.Transmit()) + { + bsmd.hisnord.Request.ReadResponseFiles(); + bsmd.hisnord.Response.ReadAnswers(); + } // external processing for dbh bsmd.dbh.MessageController.SendAndReceive(); diff --git a/bsmd.hisnord/transmitter.cs b/bsmd.hisnord/transmitter.cs index d19895c5..d0b7d117 100644 --- a/bsmd.hisnord/transmitter.cs +++ b/bsmd.hisnord/transmitter.cs @@ -10,6 +10,7 @@ using System; using System.Diagnostics; using System.IO; +using System.Threading.Tasks; using System.Xml.Serialization; using bsmd.database; using log4net; @@ -19,17 +20,17 @@ namespace bsmd.hisnord public class transmitter { private static readonly ILog _log = LogManager.GetLogger(typeof(transmitter)); - private static int? processId; // Achtung, das müsste getrennt behandelt werden Test <-> Livesystem! + private static int? processId; - public static void CallTransmitter() + public static bool Transmit() { string rootDir = Properties.Settings.Default.TransmitterRoot; if(processId.HasValue) { _log.InfoFormat("Transmitter process {0} still running, aborting call", processId); - return; - } + return false; + } ProcessStartInfo startInfo = new ProcessStartInfo(Path.Combine(rootDir, Properties.Settings.Default.Transmitter)); startInfo.WorkingDirectory = rootDir; @@ -42,13 +43,12 @@ namespace bsmd.hisnord // Ergebnis ab using (Process transmitterProcess = new Process()) - { - + { transmitterProcess.Exited += TransmitterProcess_Exited; transmitterProcess.ErrorDataReceived += TransmitterProcess_ErrorDataReceived; transmitterProcess.OutputDataReceived += TransmitterProcess_OutputDataReceived; - + transmitterProcess.StartInfo = startInfo; transmitterProcess.EnableRaisingEvents = true; transmitterProcess.Start(); @@ -59,29 +59,32 @@ namespace bsmd.hisnord processId = transmitterProcess.Id; // _log.DebugFormat("started {0}", transmitterProcess.ProcessName); - int timeout = Properties.Settings.Default.BatchTimeoutMins * 1000 * 60; // convert to ms + int timeout = Properties.Settings.Default.BatchTimeoutMins * 1000 * 60; // convert to ms + + _log.InfoFormat($"starting transmitter, process ID: {processId}, timeout {timeout} ms."); + if (!transmitterProcess.WaitForExit((timeout == 0) ? int.MaxValue : timeout)) { - _log.WarnFormat("Transmitter process not exited within {0} minute", Properties.Settings.Default.BatchTimeoutMins); - // dauert zu lang, beende Prozess.. + _log.Warn($"Transmitter {processId} not exited within {timeout} ms"); try { transmitterProcess.Kill(); - _log.Info("Transmitter killed"); + _log.Warn($"Transmitter {processId} killed"); processId = null; } catch (Exception e) { - _log.WarnFormat("Killing Transmitter failed: {0}", e.Message); + _log.Warn($"Killing Transmitter {processId} failed: {e.Message}"); } } } + return true; } private static void TransmitterProcess_OutputDataReceived(object sender, DataReceivedEventArgs e) { if(!e.Data.IsNullOrEmpty()) - _log.Debug(e.Data); + _log.Info(e.Data); } private static void TransmitterProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) @@ -92,7 +95,7 @@ namespace bsmd.hisnord private static void TransmitterProcess_Exited(object sender, EventArgs e) { - _log.Debug("Transmitter process exited"); + _log.Info("Transmitter process exited"); processId = null; } @@ -103,9 +106,7 @@ namespace bsmd.hisnord string resultDir = Path.Combine(Properties.Settings.Default.TransmitterRoot, Properties.Settings.Default.ResultDir); string resultFullPath = Path.Combine(resultDir, resultFilename); return result.ReadResult(resultFullPath); - } - - + } /// /// class to read transmitter result xml files