public bool HandleMessage(PluginsInterfaces.Message message, IMessageReplyHandler replyHandler)
 {
     try
     {
         if (_connectionPoint == "1C")
         {
             BPMExchangePortTypeClient ws = connectionServiceUT(_password, _login);
             var receiptMethod            = ws.SendMessageAsync(createOutgoingMessageUT(message)).ConfigureAwait(false).GetAwaiter();
             receiptMethod.OnCompleted(() =>
             {
                 try
                 {
                     var replyMessage = createReplyMessageUT(receiptMethod.GetResult(), message);
                     replyHandler.HandleReplyMessage(replyMessage);
                     _logger.Debug("Ответ сформирован :" + Encoding.UTF8.GetString(replyMessage.Body));
                     ws.Close();
                 }
                 catch (Exception ex)
                 {
                     replyHandler.HandleReplyMessage(createAndSendCatchMessage(ex.Message, message));
                     _logger.Error(ex.Message);
                     ws.Abort();
                 }
             });
         }
         else if (_connectionPoint == "Axapta")
         {
             IntegrationaxSoapClient ws = connectionAxapteService();
             var receiptMethod          = ws.sendMessageAsync(createOutgoingMessageAxapta(message)).ConfigureAwait(false).GetAwaiter();
             receiptMethod.OnCompleted(() =>
             {
                 try
                 {
                     var replyMessage = createReplyMessageAxapta(receiptMethod.GetResult(), message);
                     replyHandler.HandleReplyMessage(replyMessage);
                     _logger.Debug("Ответ сформирован :" + Encoding.UTF8.GetString(replyMessage.Body));
                     ws.Close();
                 }
                 catch (Exception ex)
                 {
                     replyHandler.HandleReplyMessage(createAndSendCatchMessage(ex.Message, message));
                     _logger.Error(ex.Message);
                     ws.Abort();
                 }
             });
         }
     }
     catch (Exception ex)
     {
         _logger.Error("Ошибка HandleMessage " + ex.Message);
     }
     return(true);
 }
Example #2
0
        public void Run(IMessageSource messageSource, IMessageReplyHandler replyHandler,
                        CancellationToken ct)
        {
            while (!ct.IsCancellationRequested)
            {
                var message = messageSource.PeekLockMessage(ct, 10000);
                if (message == null)
                {
                    continue;
                }

                Message reply = null;
                try
                {
                    reply = ExecuteRequest(message);
                }
                catch (Exception ex)
                {
                    _logger.Error(string.Format("Возникла ошибка при обработке сообщения {0}", message), ex);

                    var errorCode = MessageHandlingError.UnknowError;
                    if (ex is MessageHandlingException)
                    {
                        errorCode = (ex as MessageHandlingException).GetErrorCode();
                    }
                    // Удаляем сообщение с кодом ошибки
                    messageSource.CompletePeekLock(message.Id, errorCode, ex.Message);
                    continue;
                }

                try
                {
                    while (!ct.IsCancellationRequested)
                    {
                        if (replyHandler.HandleReplyMessage(reply))
                        {
                            break;
                        }
                        ct.WaitHandle.WaitOne(TimeSpan.FromSeconds(1));
                    }
                }
                catch (MessageHandlingException ex)
                {
                    _logger.Error(string.Format("Возникла ошибка при обработке ответного сообщения {0}", reply), ex);
                }
                messageSource.CompletePeekLock(message.Id);
            }
        }