internal async Task <MessagingContext> CreateAS4Message(EncodeMessageInfo encodeInfo)
        {
            var pmode = await AssembleSendingPMode(encodeInfo);

            if (pmode == null)
            {
                return(null);
            }

            var as4Message = await AssembleAS4MessageAsync(pmode, encodeInfo.Payloads);

            var context = SetupMessagingContext(as4Message, pmode);

            return(await StepProcessor.ExecuteStepsAsync(context, StepRegistry.GetOutboundProcessingStepConfiguration()));
        }
Exemple #2
0
        private static async Task <DecodeResult> PerformInboundProcessing(MessagingContext context)
        {
            var processingResult =
                await StepProcessor.ExecuteStepsAsync(context, StepRegistry.GetInboundProcessingConfiguration());

            if (processingResult.AS4Message == null)
            {
                throw new InvalidOperationException("An error occured while decoding the AS4 Message", processingResult.Exception);
            }

            if (processingResult.AS4Message.IsUserMessage)
            {
                try
                {
                    var deliverPayloads   = RetrievePayloadsFromMessage(processingResult.AS4Message);
                    var receivedMessageId = processingResult.EbmsMessageId;

                    var receiptResult =
                        await StepProcessor.ExecuteStepsAsync(processingResult, StepRegistry.GetReceiptCreationConfiguration());

                    if (receiptResult.AS4Message == null)
                    {
                        throw new InvalidOperationException("An unexpected error occured while creating the AS4 Receipt message", receiptResult.Exception);
                    }

                    return(DecodeResult.CreateWithReceipt(deliverPayloads.ToArray(),
                                                          Serializer.ToByteArray(receiptResult.AS4Message),
                                                          receivedMessageId,
                                                          receiptResult.AS4Message.GetPrimaryMessageId()));
                }
                finally
                {
                    processingResult.Dispose();
                }
            }

            if (!(processingResult.AS4Message.FirstSignalMessage is Error))
            {
                throw new InvalidProgramException("An AS4 Error Message was expected.");
            }

            // What we have now, must an error.
            return(DecodeResult.CreateWithError(Serializer.ToByteArray(processingResult.AS4Message),
                                                ((Error)processingResult.AS4Message.FirstSignalMessage),
                                                processingResult.AS4Message.FirstSignalMessage.RefToMessageId,
                                                processingResult.AS4Message.FirstSignalMessage.MessageId));
        }