public SSSBMessage(Guid conversationHandle, Guid conversationGroupID, MessageValidationType validationType, string contractName) { ConversationHandle = conversationHandle; ConversationGroupID = conversationGroupID; ValidationType = validationType; ContractName = contractName; }
/// <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); }
public SSSBDeferedMessage(Guid conversationHandle, Guid conversationGroupID, MessageValidationType validationType, string contractName, SSSBMessage parentMessage) : base(conversationHandle, conversationGroupID, validationType, contractName) { ParentMessage = parentMessage; }