<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

WebServiceExtensions

public sealed class WebServiceExtensions
using Microsoft.VisualBasic.CompilerServices; using Relativity.DataExchange; using Relativity.DataExchange.Logger; using Relativity.Logging; using System; using System.Web.Services.Protocols; namespace kCura.WinEDDS.Service { [StandardModule] public sealed class WebServiceExtensions { private static ILog _logger = RelativityLogger.Instance; public static T RetryOnReLoginException<T>(this SoapHttpClientProtocol input, Func<T> serviceCall, bool retryOnFailure = true) { int num = 0; while (num < AppSettings.Instance.MaxReloginTries) { num = checked(num + 1); try { return serviceCall(); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; LogFailedServiceCall(ex2, num, retryOnFailure); if (!retryOnFailure || !(ex2 is SoapException) || ex2.ToString().IndexOf("NeedToReLoginException") == -1 || num >= AppSettings.Instance.MaxReloginTries) { LogFailedExceptionCheck(ex2); throw; } LogAttemptReLogin(ex2); try { Helper.AttemptReLogin(input.get_Credentials(), input.get_CookieContainer(), num, false); } catch (Exception ex3) { ProjectData.SetProjectError(ex3); Exception exception = ex3; LogFailedAttemptReLogin(exception); ProjectData.ClearProjectError(); } ProjectData.ClearProjectError(); } } return default(T); } public static void RetryOnReLoginException(this SoapHttpClientProtocol input, Action serviceCall, bool retryOnFailure = true) { int num = 0; while (num < AppSettings.Instance.MaxReloginTries) { num = checked(num + 1); try { serviceCall(); return; } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; LogFailedServiceCall(ex2, num, retryOnFailure); if (!retryOnFailure || !(ex2 is SoapException) || ex2.ToString().IndexOf("NeedToReLoginException") == -1 || num >= AppSettings.Instance.MaxReloginTries) { LogFailedExceptionCheck(ex2); throw; } LogAttemptReLogin(ex2); try { Helper.AttemptReLogin(input.get_Credentials(), input.get_CookieContainer(), num, false); } catch (Exception ex3) { ProjectData.SetProjectError(ex3); Exception exception = ex3; LogFailedAttemptReLogin(exception); ProjectData.ClearProjectError(); } ProjectData.ClearProjectError(); } } } private static void LogFailedServiceCall(Exception exception, int tries, bool retryOnFailure) { int maxReloginTries = AppSettings.Instance.MaxReloginTries; string authenticationToken = Settings.AuthenticationToken; string str = "An error occurred when retrying on a re-login exception"; if (retryOnFailure) _logger.LogError(exception, str + " Currently on attempt {tries} out of {maxRetries}, using token {token}", new object[3] { tries, maxReloginTries, authenticationToken.Secure() }); else _logger.LogError(exception, str + " Will not retry, using token {token}", new object[1] { authenticationToken.Secure() }); } private static void LogAttemptReLogin(Exception exception) { _logger.LogError(exception, "Attempting re-login", new object[0]); } private static void LogFailedExceptionCheck(Exception exception) { _logger.LogError(exception, "Will not attempt to retry", new object[0]); } private static void LogFailedAttemptReLogin(Exception exception) { _logger.LogError(exception, "Failed to log in the user", new object[0]); } } }