public void SetPaidStatus(BillDemandPaidApiCommandArgument arg) { AuthenticationService.Authenticate(arg.SecurityToken); if (!AuthenticationService.IsAuthenticated()) { return; } if (!AuthorizationService.IsAllowedToExecuteCommand(arg.InstanceId, WorkflowCommandType.SetPaidStatus)) { return; } FireCommandWithWaiting(arg, delegate(BillDemandPaidApiCommandArgument arg1) { using (var sync = GetWorkflowSync(arg1)) { WorkflowInitService.RaiseSetPaidStatus(arg1.InstanceId, arg1.PaymentDate, arg1.DocumentNumber); sync.WaitHandle.WaitOne(4000); } }); }
private void FireCommandWithWaiting(BillDemandPaidApiCommandArgument arg, Action <BillDemandPaidApiCommandArgument> action) { try { action.Invoke(arg); } catch (EventDeliveryFailedException) { using (var sync = GetWorkflowSync(arg)) { sync.WaitHandle.WaitOne(2000); } try { action.Invoke(arg); } catch (Exception) { throw new FaultException <BaseFault>(new BaseFault((int)ErrorCodes.CommandProccessingError), new FaultReason("Не удалось выполнить команду. Попробуйте провести данную операцию еще раз. Если сообщение будет повторятся, обратитесь к Администратору.")); } } }