public Telegram Process(TelegramBodyType type, Telegram telegram) { try { var policy = new RetryPolicy(new TelegramProcessingErrorDetectionStrategy(telegram), new FixedInterval(_retryPolicyCount, TimeSpan.FromSeconds(_retryPolicyTime))); return(policy.ExecuteAction(() => ProcessTelegram(telegram))); } catch (Exception ex) { // if (ex is UnauthorizedAccessException) // throw; if (ex is TimeoutException) { _log.Error(ex); } else { IsConnected = false; _log.Error("Ошибка отправки телеграммы", ex); } throw; } }
public void Process(TelegramBodyType bodyType, Telegram telegram) { // присваиваем транзакцию telegram.TransactionNumber = _transactionNumber; //HACK: пока клиент общается только с SDCL (по правильному эти параметры должны передаваться через настройки) telegram.ToId.ServiceId = "SDCL"; telegram.ToId.SessionId = 0; var tt = telegram as ITelegramWrapper; var realTelegram = tt != null?tt.UnWrap() : telegram; _receivedTelegram = _clnt.Process(bodyType, realTelegram); if (tt != null) { tt.FillBy(_receivedTelegram); } _receivedTelegram = null; }
private void ProcessTelegramm(Telegram telegram, TelegramBodyType bodyType = TelegramBodyType.Wms) { // выставляем uow для управления транзакциями telegram.UnitOfWork = GetId(); // Непосредственную отправку делаем в отдельном потоке. // Такой подход необходим, т.к. если отправка будет осуществляться из UI, то произойдет DeadLock // Бонусом получаем удобный механизм отслеживания TimeOut-ов var processTask = new Task(() => { using (var transmitter = IoC.Instance.Resolve <ITransmitter>()) { transmitter.Process(bodyType, telegram); } }); processTask.Start(); if (!processTask.Wait(DefaultTimeout)) { throw new TimeoutException(ExceptionResources.TimeoutExceptionMessage); } }