Esempio n. 1
0
 public SSSBMessage(Guid conversationHandle, Guid conversationGroupID, MessageValidationType validationType, string contractName)
 {
     ConversationHandle  = conversationHandle;
     ConversationGroupID = conversationGroupID;
     ValidationType      = validationType;
     ContractName        = contractName;
 }
Esempio n. 2
0
        /// <summary>
        /// Load message data from the data reader
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private SSSBMessage FillMessageFromReader(IDataReader reader)
        {
            //conversation_group_id,
            //conversation_handle,
            //message_sequence_number,
            //service_name,
            //service_contract_name,
            //message_type_name,
            //validation,
            //message_body
            Guid   conversationGroupID           = reader.GetGuid(0);
            Guid   conversationHandle            = reader.GetGuid(1);
            long   sequenceNumber                = reader.GetInt64(2);
            string serviceName                   = reader.GetString(3);
            string contractName                  = reader.GetString(4);
            string messageType                   = reader.GetString(5);
            string validation                    = reader.GetString(6);
            MessageValidationType validationType = MessageValidationType.None;

            if (validation == "X")
            {
                validationType = MessageValidationType.XML;
            }
            else if (validation == "E")
            {
                validationType = MessageValidationType.Empty;
            }

            SSSBMessage message = new SSSBMessage(conversationHandle, conversationGroupID, validationType, contractName);

            message.SequenceNumber = sequenceNumber;
            message.ServiceName    = serviceName;
            message.MessageType    = messageType;

            if (!reader.IsDBNull(7))
            {
                /*
                 * byte[] buffer = new byte[8040];
                 * long offset = 0;
                 * int read;
                 * using (MemoryStream ms = new MemoryStream())
                 * {
                 *  while ((read = (int)reader.GetBytes(7, offset, buffer, 0, buffer.Length)) > 0)
                 *  {
                 *      offset += read;
                 *      ms.Write(buffer, 0, read);
                 *  }
                 *  ms.Flush();
                 *  ms.Position = 0;
                 *  message.Body = ms.ToArray();
                 * }
                 */

                /*
                 *  // Get message size
                 *  int size = (int)reader.GetBytes(7, 0, null, 0, 0);
                 *  message.Body = new byte[size];
                 *  reader.GetBytes(7, 0, message.Body, 0, message.Body.Length);
                 */

                message.Body = (byte[])reader[7];
            }
            else
            {
                message.Body = null;
            }

            message.ServiceName = this._service.Name;

            return(message);
        }
        public override async Task <ServiceMessageEventArgs> HandleMessage(ISSSBService sender, ServiceMessageEventArgs serviceMessageArgs)
        {
            MessageAtributes messageAtributes = null;
            SSSBMessage      originalMessage  = null;

            try
            {
                serviceMessageArgs.Token.ThrowIfCancellationRequested();
                XElement envelopeXml         = serviceMessageArgs.Message.GetMessageXML();
                byte[]   originalMessageBody = Convert.FromBase64String(envelopeXml.Element("body").Value);
                XElement originalMessageXml  = originalMessageBody.GetMessageXML();
                messageAtributes               = originalMessageXml.GetMessageAttributes();
                messageAtributes.isDefered     = true;
                messageAtributes.attemptNumber = (int)envelopeXml.Attribute("attemptNumber");
                string messageType    = (string)envelopeXml.Attribute("messageType");
                string serviceName    = (string)envelopeXml.Attribute("serviceName");
                string contractName   = (string)envelopeXml.Attribute("contractName");
                long   sequenceNumber = (long)envelopeXml.Attribute("sequenceNumber");
                MessageValidationType validationType = (MessageValidationType)Enum.Parse(typeof(MessageValidationType), envelopeXml.Attribute("validationType").Value);
                Guid conversationHandle  = Guid.Parse(envelopeXml.Attribute("conversationHandle").Value);
                Guid conversationGroupID = Guid.Parse(envelopeXml.Attribute("conversationGroupID").Value);

                originalMessage = new SSSBMessage(conversationHandle, conversationGroupID, validationType, contractName);
                originalMessage.SequenceNumber = sequenceNumber;
                originalMessage.ServiceName    = serviceName;
                originalMessage.Body           = originalMessageBody;
            }
            catch (OperationCanceledException)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetCanceled(serviceMessageArgs.Token);
                return(serviceMessageArgs);
            }
            catch (PPSException ex)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetException(ex);
                return(serviceMessageArgs);
            }
            catch (Exception ex)
            {
                this.Logger.LogError(ErrorHelper.GetFullMessage(ex));
                serviceMessageArgs.TaskCompletionSource.TrySetException(new PPSException(ex));
                return(serviceMessageArgs);
            }

            OnDemandTaskManager taskManager = serviceMessageArgs.Services.GetRequiredService <OnDemandTaskManager>();

            try
            {
                serviceMessageArgs.Token.ThrowIfCancellationRequested();
                var task = await taskManager.GetTaskInfo(messageAtributes.TaskID.Value);

                serviceMessageArgs.TaskID = messageAtributes.TaskID.Value;
                var executorArgs = new ExecutorArgs(taskManager, task, originalMessage, messageAtributes);
                await ExecuteTask(executorArgs, serviceMessageArgs);
            }
            catch (OperationCanceledException)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetCanceled(serviceMessageArgs.Token);
            }
            catch (PPSException ex)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetException(ex);
            }
            catch (Exception ex)
            {
                Logger.LogCritical(ErrorHelper.GetFullMessage(ex));
                serviceMessageArgs.TaskCompletionSource.TrySetException(new PPSException(ex));
            }

            return(serviceMessageArgs);
        }
Esempio n. 4
0
 public SSSBDeferedMessage(Guid conversationHandle, Guid conversationGroupID, MessageValidationType validationType, string contractName, SSSBMessage parentMessage) :
     base(conversationHandle, conversationGroupID, validationType, contractName)
 {
     ParentMessage = parentMessage;
 }