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); }
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); } }