private bool HandleExceptions(Action action, Action onException, RemoteScenarioInfo info)
        {
            var strErrPrefix = "Ошибка во время соединения с удаленным сценарием";

            try
            {
                action?.Invoke();
                return(true);
            }
            catch (Exception e)
            {
                //crutch
                if (e is AggregatedCommunicationException)
                {
                    Log.InfoFormat(strErrPrefix + ". {0}; [{2}], удаленное ID:[{1}], [{3}]",
                                   e.Message, info.Name, info.ScenarioId, Credentials.GetAddress());
                }
                else if (
                    SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.ObjectNotFound) ||
                    SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.DecryptionError) ||
                    SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.ObjectAccessDenied) ||
                    SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.AccessDenied))
                {
                    Log.InfoFormat(strErrPrefix + ". " + e.Message + "; [{0}], [{2}], удаленное ID:[{1}], [{3}]",
                                   info.Name, info.ScenarioId, Credentials.GetAddress(), e.InnerException?.Message);
                }
                else
                {
                    Log.WarnFormat(e, strErrPrefix + ". Unrecognized exception; [{0}], [{2}], удаленное ID:[{1}], [{3}]",
                                   info.Name, info.ScenarioId, Credentials.GetAddress(), e.InnerException?.Message);
                }
                onException?.Invoke();
                return(false);
            }
        }
Exemplo n.º 2
0
 public static void Register(RemoteScenarioInfo info)
 {
     lock (_threadings)
         if (!_threadings.ContainsKey(info.Credentials))
         {
             _threadings.Add(info.Credentials, new ServerClientThreading(info.Credentials));
         }
     _threadings[info.Credentials].Append(info);
 }
Exemplo n.º 3
0
 public static void Unregister(RemoteScenarioInfo info)
 {
     lock (_threadings)
         if (_threadings.ContainsKey(info.Credentials))
         {
             _threadings[info.Credentials].Remove(info);
             info.SetUnregistered();
         }
 }
 public void Remove(RemoteScenarioInfo info)
 {
     lock (ServerScenariosInfos)
     {
         ServerScenariosInfos.Remove(info);
         if (!ServerScenariosInfos.Any())
         {
             StopListen();
         }
     }
 }
 public void Append(RemoteScenarioInfo info)
 {
     lock (ServerScenariosInfos)
         if (!ServerScenariosInfos.Any(x => x.Equals(info)))
         {
             ServerScenariosInfos.Add(info);
         }
     if (!_isListening)
     {
         StartListen();
     }
 }
 public RemoteScenarioValueChangedArgs(RemoteScenarioInfo info, ScenarioInfo scenInfo)
 {
     Info         = info;
     ScenarioInfo = scenInfo;
 }