Exemple #1
0
        /// <summary>
        /// Отправка отложенного сообщения. Сообщение содержит информацию о типе, идентификатор диалога и пр. необходимую для отправки информацию.
        /// </summary>
        /// <param name="fromService"></param>
        /// <param name="message"></param>
        /// <param name="lifetime"></param>
        /// <param name="isWithEncryption"></param>
        /// <param name="activationTime"></param>
        /// <param name="objectID"></param>
        public async Task <long?> SendPendingMessage(SqlConnection dbconnection,
                                                     SSSBMessage message,
                                                     string fromService,
                                                     TimeSpan lifetime,
                                                     bool isWithEncryption,
                                                     DateTime activationTime,
                                                     string objectID,
                                                     int attemptNumber)
        {
            Debug($"Executing method SendPendingMessage(ConversationHandle: {message.ConversationHandle}, fromService: {fromService}, activationTime: {activationTime: dd.MM.yyyy HH:mm:ss}");
            try
            {
                XElement xmessage = new XElement("DeferedMessage",
                                                 new XAttribute("conversationHandle", message.ConversationHandle),
                                                 new XAttribute("conversationGroupID", message.ConversationGroupID),
                                                 new XAttribute("messageType", message.MessageType),
                                                 new XAttribute("serviceName", message.ServiceName),
                                                 new XAttribute("contractName", message.ContractName),
                                                 new XAttribute("sequenceNumber", message.SequenceNumber),
                                                 new XAttribute("validationType", message.ValidationType),
                                                 new XAttribute("attemptNumber", attemptNumber),
                                                 new XElement("body", Convert.ToBase64String(message.Body))
                                                 );

                byte[] body = xmessage.ConvertToBytes();

                long?pendingMessageID = await _manager.SendPendingMessage(
                    dbconnection,
                    objectID,
                    activationTime,
                    fromService,
                    message.ServiceName,
                    message.ContractName,
                    (int)lifetime.TotalSeconds,
                    isWithEncryption,
                    body,
                    "PPS_DeferedMessageType");

                return(pendingMessageID);
            }
            catch (SqlException ex)
            {
                DBWrapperExceptionsHelper.ThrowError(ex, ServiceBrokerResources.PendingMessageErrMsg, _logger);
            }
            catch (Exception ex)
            {
                _logger.LogError(ErrorHelper.GetFullMessage(ex));
                throw new PPSException(ServiceBrokerResources.PendingMessageErrMsg, ex);
            }
            return(null);
        }