diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs index 9f9720d..93b5d8c 100644 --- a/AssemblyInfo.cs +++ b/AssemblyInfo.cs @@ -29,5 +29,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.5.4.0")] -[assembly: AssemblyFileVersion("1.5.4.0")] +[assembly: AssemblyVersion("1.5.6.0")] +[assembly: AssemblyFileVersion("1.5.6.0")] diff --git a/XESmartTarget.Core/Target.cs b/XESmartTarget.Core/Target.cs index 40aaef6..a6e2b1d 100644 --- a/XESmartTarget.Core/Target.cs +++ b/XESmartTarget.Core/Target.cs @@ -140,34 +140,63 @@ internal void Process() bool connectedOnce = false; bool shouldContinue = true; + int attempts = 0; + + QueryableXEventData eventStream = null; - while (shouldContinue) { try { - QueryableXEventData eventStream = ConnectSessionStream(ConnectionString); + if(attempts < 240) attempts++; // connect attempts will be at least every 1 hour (240 * 15 sec = 3600 sec = 1 hour) + + eventStream = ConnectSessionStream(ConnectionString); connectedOnce = true; - logger.Info($"Connected to {ServerName}."); - ProcessStreamData(eventStream); + attempts = 0; + logger.Info($"Connected to '{ServerName}'."); } catch (Exception e) { - logger.Error(e, ServerName); - if (FailOnProcessingError) + if(attempts == 1) { - throw; + logger.Error($"Error connecting to '{ServerName}'"); + logger.Error(e.InnerException ?? e); } else { - int? errNumber = (e.InnerException as SqlException)?.Number; - if ((errNumber == 25727 || errNumber == 25728) - && connectedOnce) + string msg = e.Message; + if (e.InnerException != null) { - shouldContinue = true; - Thread.Sleep(15000); // sleep 15 seconds and reconnect + msg = e.InnerException.Message; } + logger.Error($"Error connecting to '{ServerName}', attempt {attempts}"); + logger.Error(msg); + } + if (FailOnProcessingError) + { + throw; + } + else + { + Thread.Sleep(attempts * 15000); // linear reconnect backoff + continue; + } + } + try + { + ProcessStreamData(eventStream); + } + catch(Exception e) + { + logger.Error($"Error processing event data from '{ServerName}'"); + logger.Error(e); + if (FailOnProcessingError) + { + eventStream.Dispose(); + throw; + } + else { shouldContinue = connectedOnce; } } @@ -229,7 +258,6 @@ private QueryableXEventData ConnectSessionStream(string connectionString) catch (Exception e) { var ioe = new InvalidOperationException($"Unable to connect to the Extended Events session {SessionName} on server {ServerName}", e); - logger.Error(ioe); throw ioe; } diff --git a/XESmartTarget.Core/XESmartTarget.Core.csproj b/XESmartTarget.Core/XESmartTarget.Core.csproj index c8f75c9..b7486ad 100644 --- a/XESmartTarget.Core/XESmartTarget.Core.csproj +++ b/XESmartTarget.Core/XESmartTarget.Core.csproj @@ -170,7 +170,10 @@ 13.0.3 - 4.4.12 + 4.7.15 + + + 4.7.15 2.1.0.2 diff --git a/XESmartTarget/NLog.config b/XESmartTarget/NLog.config index 96183fd..7d4d716 100644 --- a/XESmartTarget/NLog.config +++ b/XESmartTarget/NLog.config @@ -8,8 +8,15 @@ - - + + diff --git a/XESmartTarget/XESmartTarget.csproj b/XESmartTarget/XESmartTarget.csproj index 7be6874..55b49f8 100644 --- a/XESmartTarget/XESmartTarget.csproj +++ b/XESmartTarget/XESmartTarget.csproj @@ -136,7 +136,7 @@ 2.9.1 - 4.4.12 + 4.7.15 diff --git a/XelToCsv/XelToCsv.csproj b/XelToCsv/XelToCsv.csproj index 97d4c60..8512100 100644 --- a/XelToCsv/XelToCsv.csproj +++ b/XelToCsv/XelToCsv.csproj @@ -76,17 +76,22 @@ ..\packages\CommandLineParser.2.9.1\lib\net461\CommandLine.dll - ..\packages\NLog.4.4.12\lib\net45\NLog.dll + ..\packages\NLog.4.7.15\lib\net45\NLog.dll + ..\packages\System.Console.4.3.1\lib\net46\System.Console.dll + ..\packages\System.Reflection.TypeExtensions.4.7.0\lib\net461\System.Reflection.TypeExtensions.dll + + + @@ -104,7 +109,7 @@ - Always + PreserveNewest Designer diff --git a/XelToCsv/packages.config b/XelToCsv/packages.config index ef56721..d0a8f17 100644 --- a/XelToCsv/packages.config +++ b/XelToCsv/packages.config @@ -1,7 +1,9 @@  - + + +