private static AS4Party ResolveSubmitOrPModeReceiverParty(
            SubmitParty submitParty,
            PModeParty pmodeParty,
            bool allowOverride)
        {
            if (allowOverride == false &&
                submitParty != null &&
                pmodeParty != null &&
                submitParty.Equals(pmodeParty) == false)
            {
                throw new NotSupportedException(
                          "SubmitMessage is not allowed by the SendingPMode to override ToParty");
            }

            if (submitParty == null && pmodeParty == null)
            {
                throw new InvalidOperationException(
                          "Either the SubmitMessage or the SendingPMode is required to have a " +
                          "ToParty configured for dynamic discovery in a non-Forwarding scenario");
            }

            if (submitParty != null)
            {
                Logger.Debug(
                    "Resolve ToParty in non-Forwarding scenario from SubmitMessage "
                    + "because SendingPMode allows overriding {AllowOverride = true}");

                return(CreateToPartyFrom(
                           "SubmitMessage",
                           submitParty.Role,
                           (submitParty.PartyIds ?? Enumerable.Empty <SubmitPartyId>())
                           .Select(p => new PartyId(p?.Id, p?.Type.AsMaybe()))));
            }

            if (pmodeParty?.PartyIds.Any() == false)
            {
                Logger.Error(
                    "Cannot retrieve SMP metadata because SendingPMode must contain at lease one "
                    + "<ToPartyId/> element in the MessagePackaging.PartyInfo.ToParty element");

                throw new ConfigurationErrorsException(
                          "Cannot retrieve SMP metadata because the message is referencing an incomplete SendingPMode");
            }

            Logger.Debug("Resolve ToParty in non-Forwarding scenario from SendingPMode because SubmitMessage has none");
            return(CreateToPartyFrom(
                       "SendingPMode",
                       pmodeParty.Role,
                       (pmodeParty.PartyIds ?? Enumerable.Empty <PModePartyId>())
                       .Select(p => new PartyId(p?.Id, p?.Type.AsMaybe()))));
        }
Пример #2
0
        private static (bool, AS4Party) ExerciseDynamicDiscovery(
            SubmitParty submitParty,
            PModeParty pmodeParty,
            bool allowOverride)
        {
            var context = new MessagingContext(
                new SubmitMessage
            {
                PartyInfo = { ToParty = submitParty }
            })
            {
                SendingPMode = new SendingProcessingMode
                {
                    AllowOverride    = allowOverride,
                    DynamicDiscovery = new DynamicDiscoveryConfiguration(),
                    MessagePackaging = { PartyInfo   = new PartyInfo {
                                             ToParty = pmodeParty
                                         } }
                }
            };

            try
            {
                var spy = new SpyToPartyDynamicDiscoveryProfile();
                var sut = new DynamicDiscoveryStep(_ => spy);
                sut.ExecuteAsync(context)
                .GetAwaiter()
                .GetResult();

                return(true, spy.ToParty);
            }
            catch
            {
                return(false, null);
            }
        }