コード例 #1
0
        /// <summary>
        /// Bekreft mottak av forretningskvittering gjennom <see cref="HentKvittering(Kvitteringsforespørsel)"/>.
        /// <list type="bullet">
        /// <listheader><description><para>Dette legger opp til følgende arbeidsflyt</para></description></listheader>
        /// <item><description><para><see cref="HentKvittering(Kvitteringsforespørsel)"/></para></description></item>
        /// <item><description><para>Gjør intern prosessering av kvitteringen (lagre til database, og så videre)</para></description></item>
        /// <item><description><para>Bekreft mottak av kvittering</para></description></item>
        /// </list>
        /// </summary>
        /// <param name="forrigeKvittering"></param>
        /// <remarks>
        /// <see cref="HentKvittering(Kvitteringsforespørsel)"/> kommer ikke til å returnere en ny kvittering før mottak av den forrige er bekreftet.
        /// </remarks>
        public async Task BekreftAsync(Forretningskvittering forrigeKvittering)
        {
            Logging.Log(TraceEventType.Information, forrigeKvittering.KonversasjonsId, "Bekrefter forrige kvittering.");

            var envelopeSettings          = new EnvelopeSettings(forrigeKvittering, _databehandler, new GuidUtility());
            var kvitteringMottattEnvelope = new KvitteringsbekreftelseEnvelope(envelopeSettings);

            string filnavn = forrigeKvittering.GetType().Name + ".xml";

            Logg(TraceEventType.Verbose, forrigeKvittering.KonversasjonsId, forrigeKvittering, true, true, filnavn);

            try
            {
                var kvitteringMottattEnvelopeValidering = new KvitteringMottattEnvelopeValidator();
                var kvitteringMottattEnvelopeValidert   = kvitteringMottattEnvelopeValidering.ValiderDokumentMotXsd(kvitteringMottattEnvelope.Xml().OuterXml);
                if (!kvitteringMottattEnvelopeValidert)
                {
                    throw new Exception(kvitteringMottattEnvelopeValidering.ValideringsVarsler);
                }
            }
            catch (Exception e)
            {
                throw new XmlValidationException("Kvitteringsbekreftelse validerer ikke:" + e.Message);
            }


            var soapContainer = new SoapContainer(kvitteringMottattEnvelope);

            await SendSoapContainer(soapContainer);
        }
コード例 #2
0
        /// <summary>
        /// Forespør kvittering for forsendelser med mulighet til å samtidig bekrefte på forrige kvittering for å slippe å kjøre eget kall for bekreft.
        /// Kvitteringer blir tilgjengeliggjort etterhvert som de er klare i meldingsformidler. Det er ikke mulig å etterspørre kvittering for en
        /// spesifikk forsendelse.
        /// </summary>
        /// <param name="kvitteringsforespørsel"></param>
        /// <param name="forrigeKvittering"></param>
        /// <returns></returns>
        /// <remarks>
        /// <list type="table">
        /// <listheader><description>Dersom det ikke er tilgjengelige kvitteringer skal det ventes følgende tidsintervaller før en ny forespørsel gjøres</description></listheader>
        /// <item><term>normal</term><description>Minimum 10 minutter</description></item>
        /// <item><term>prioritert</term><description>Minimum 1 minutt</description></item>
        /// </list>
        /// </remarks>
        public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering)
        {
            if (forrigeKvittering != null)
            {
                Bekreft(forrigeKvittering);
            }

            Logging.Log(TraceEventType.Information, "Henter kvittering for " + kvitteringsforespørsel.Mpc);

            var guidHandler         = new GuidUtility();
            var envelopeSettings    = new EnvelopeSettings(kvitteringsforespørsel, _databehandler, guidHandler);
            var kvitteringsenvelope = new KvitteringsforespørselEnvelope(envelopeSettings);

            Logging.Log(TraceEventType.Verbose, "Envelope for kvitteringsforespørsel" + Environment.NewLine + kvitteringsenvelope.Xml().OuterXml);

            ValiderKvitteringsEnvelope(kvitteringsenvelope);

            var soapContainer = new SoapContainer(kvitteringsenvelope);
            var kvittering    = await SendSoapContainer(soapContainer);

            Logg(TraceEventType.Verbose, Guid.Empty, kvitteringsenvelope.Xml().OuterXml, true, true, "Sendt - Kvitteringsenvelope.xml");

            try
            {
                var valideringAvResponsSignatur = new Responsvalidator(kvittering, kvitteringsenvelope.Xml());
                valideringAvResponsSignatur.ValiderHeaderSignatur();
                valideringAvResponsSignatur.ValiderKvitteringSignatur();
            }
            catch (Exception e)
            {
                return(ValiderTransportkvittering(kvittering, kvitteringsenvelope.Xml(), guidHandler));
            }

            return(KvitteringFactory.GetForretningskvittering(kvittering));
        }
コード例 #3
0
 /// <summary>
 /// Validate the object.
 /// </summary>
 /// <exception cref="ValidationException">
 /// Thrown if validation fails
 /// </exception>
 public virtual void Validate()
 {
     if (MessageConnectionSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "MessageConnectionSettings");
     }
     if (AcknowledgementConnectionSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "AcknowledgementConnectionSettings");
     }
     if (MdnSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "MdnSettings");
     }
     if (SecuritySettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "SecuritySettings");
     }
     if (ValidationSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "ValidationSettings");
     }
     if (EnvelopeSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "EnvelopeSettings");
     }
     if (ErrorSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "ErrorSettings");
     }
     if (MessageConnectionSettings != null)
     {
         MessageConnectionSettings.Validate();
     }
     if (AcknowledgementConnectionSettings != null)
     {
         AcknowledgementConnectionSettings.Validate();
     }
     if (MdnSettings != null)
     {
         MdnSettings.Validate();
     }
     if (SecuritySettings != null)
     {
         SecuritySettings.Validate();
     }
     if (ValidationSettings != null)
     {
         ValidationSettings.Validate();
     }
     if (EnvelopeSettings != null)
     {
         EnvelopeSettings.Validate();
     }
     if (ErrorSettings != null)
     {
         ErrorSettings.Validate();
     }
 }
        /// <summary>
        ///     Bekreft mottak av <see cref="Forretningskvittering" /> mottatt gjennom
        ///     <see cref="HentKvittering(Kvitteringsforespørsel)" />.
        ///     <list type="bullet">
        ///         <listheader>
        ///             <description>
        ///                 <para>Dette legger opp til følgende arbeidsflyt:</para>
        ///             </description>
        ///         </listheader>
        ///         <item>
        ///             <description>
        ///                 <para>
        ///                     <see cref="HentKvittering(Kvitteringsforespørsel)" />.
        ///                 </para>
        ///             </description>
        ///         </item>
        ///         <item>
        ///             <description>
        ///                 <para>Gjør intern prosessering av <see cref="Kvittering">Kvitteringen</see>.</para>
        ///             </description>
        ///         </item>
        ///         <item>
        ///             <description>
        ///                 <para><see cref="BekreftAsync">Bekreft</see> mottak av <see cref="Forretningskvittering" />.</para>
        ///             </description>
        ///         </item>
        ///     </list>
        /// </summary>
        /// <param name="kvittering"></param>
        /// <remarks>
        ///     <see cref="HentKvittering(Kvitteringsforespørsel)" /> kommer ikke til å returnere en ny kvittering før mottak av
        ///     den forrige er bekreftet.
        /// </remarks>
        public async Task BekreftAsync(Forretningskvittering kvittering)
        {
            var envelopeSettings          = new EnvelopeSettings(kvittering, Databehandler, new GuidUtility());
            var bekreftKvitteringEnvelope = new KvitteringsbekreftelseEnvelope(envelopeSettings);

            ValidateEnvelopeAndThrowIfInvalid(bekreftKvitteringEnvelope, bekreftKvitteringEnvelope.GetType().Name);

            await RequestHelper.ConfirmReceipt(bekreftKvitteringEnvelope).ConfigureAwait(false);

            Log.Debug($"Bekreftet kvittering, conversationId '{kvittering.KonversasjonsId}'");
        }
コード例 #5
0
        internal static ForretningsmeldingEnvelope GetForretningsmeldingEnvelope()
        {
            var envelopeSettings = new EnvelopeSettings(
                GetDigitalForsendelseEnkel(),
                GetAsicEArkivEnkel(),
                GetDatabehandler(),
                GuidUtility,
                new Klientkonfigurasjon());

            return(new ForretningsmeldingEnvelope(envelopeSettings));
        }
コード例 #6
0
        internal static ForretningsmeldingEnvelope GetForretningsmeldingEnvelope()
        {
            var envelopeSettings = new EnvelopeSettings(
                GetForsendelseSimple(),
                GetAsiceArchiveSimple(),
                GetDatabehandler(),
                GuidUtility,
                new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø));

            return(new ForretningsmeldingEnvelope(envelopeSettings));
        }
コード例 #7
0
        internal static ForretningsmeldingEnvelope GetForretningsmeldingEnvelopeMedTestSertifikat()
        {
            var envelopeSettings = new EnvelopeSettings(
                GetDigitalForsendelseEnkelMedTestSertifikat(),
                GetAsicEArkivEnkelMedTestSertifikat(),
                GetDatabehandlerMedTestSertifikat(),
                GuidUtility,
                new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø));

            return(new ForretningsmeldingEnvelope(envelopeSettings));
        }
コード例 #8
0
        /// <summary>
        ///     Forespør kvittering for forsendelser med mulighet til å samtidig bekrefte på forrige kvittering for å slippe å
        ///     kjøre eget kall for bekreft.
        ///     Kvitteringer blir tilgjengeliggjort etterhvert som de er klare i meldingsformidler. Det er ikke mulig å etterspørre
        ///     kvittering for en
        ///     spesifikk forsendelse.
        /// </summary>
        /// <param name="kvitteringsforespørsel"></param>
        /// <param name="forrigeKvittering"></param>
        /// <returns></returns>
        /// <remarks>
        ///     <list type="table">
        ///         <listheader>
        ///             <description>
        ///                 Dersom det ikke er tilgjengelige kvitteringer skal det ventes følgende tidsintervaller før en
        ///                 ny forespørsel gjøres
        ///             </description>
        ///         </listheader>
        ///         <item>
        ///             <term>normal</term><description>Minimum 10 minutter</description>
        ///         </item>
        ///         <item>
        ///             <term>prioritert</term><description>Minimum 1 minutt</description>
        ///         </item>
        ///     </list>
        /// </remarks>
        public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering)
        {
            if (forrigeKvittering != null)
            {
                Bekreft(forrigeKvittering);
            }

            Logging.Log(TraceEventType.Information, "Henter kvittering for " + kvitteringsforespørsel.Mpc);

            var guidUtility      = new GuidUtility();
            var envelopeSettings = new EnvelopeSettings(kvitteringsforespørsel, _databehandler, guidUtility);
            var kvitteringsforespørselEnvelope = new KvitteringsforespørselEnvelope(envelopeSettings);

            Logging.Log(TraceEventType.Verbose, "Envelope for kvitteringsforespørsel" + Environment.NewLine + kvitteringsforespørselEnvelope.Xml().OuterXml);

            ValiderKvitteringsEnvelope(kvitteringsforespørselEnvelope);

            var soapContainer            = new SoapContainer(kvitteringsforespørselEnvelope);
            var kvitteringsresponsrådata = await SendSoapContainer(soapContainer);

            Logg(TraceEventType.Verbose, Guid.Empty, kvitteringsforespørselEnvelope.Xml().OuterXml, true, true, "Sendt - Kvitteringsenvelope.xml");

            var kvitteringsresponsXml = new XmlDocument();

            kvitteringsresponsXml.LoadXml(kvitteringsresponsrådata);

            var kvitteringsrespons = KvitteringFactory.GetKvittering(kvitteringsresponsrådata);

            if (kvitteringsrespons is TomKøKvittering)
            {
                SikkerhetsvalideringAvTomKøKvittering(kvitteringsresponsXml, kvitteringsforespørselEnvelope.Xml());
            }
            else if (kvitteringsrespons is Forretningskvittering)
            {
                SikkerhetsvalideringAvMeldingskvittering(kvitteringsresponsXml, kvitteringsforespørselEnvelope);
            }

            return(kvitteringsrespons);
        }
        /// <summary>
        ///     Forespør <see cref="Kvittering" /> for <see cref="Forsendelse">Forsendelser</see>, med mulighet til å samtidig
        ///     <see cref="BekreftAsync">bekrefte</see> på forrige <see cref="Kvittering" /> for å slippe å
        ///     kjøre eget kall for <see cref="BekreftAsync" />. <see cref="Kvittering">Kvitteringer</see> blir tilgjengeliggjort
        ///     etterhvert som de er klare i Meldingsformidler. Det er ikke mulig å etterspørre
        ///     <see cref="Kvittering" /> for en spesifikk forsendelse.
        /// </summary>
        /// <param name="kvitteringsforespørsel"></param>
        /// <param name="forrigeKvittering"></param>
        /// <returns></returns>
        /// <remarks>
        ///     <list type="table">
        ///         <listheader>
        ///             <description>
        ///                 Dersom det ikke er tilgjengelige <see cref="Kvittering">Kvitteringer</see> skal det ventes følgende
        ///                 tidsintervaller før en ny forespørsel gjøres:
        ///             </description>
        ///         </listheader>
        ///         <item>
        ///             <term>normal</term><description>Minimum 10 minutter</description>
        ///         </item>
        ///         <item>
        ///             <term>prioritert</term><description>Minimum 1 minutt</description>
        ///         </item>
        ///     </list>
        /// </remarks>
        public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering)
        {
            if (forrigeKvittering != null)
            {
                await BekreftAsync(forrigeKvittering).ConfigureAwait(false);
            }

            var guidUtility = new GuidUtility();

            Log.Debug($"Utgående kvitteringsforespørsel, messageId '{guidUtility.MessageId}'.");

            var envelopeSettings = new EnvelopeSettings(kvitteringsforespørsel, Databehandler, guidUtility);
            var kvitteringsforespørselEnvelope = new KvitteringsforespørselEnvelope(envelopeSettings);

            ValidateEnvelopeAndThrowIfInvalid(kvitteringsforespørselEnvelope, kvitteringsforespørselEnvelope.GetType().Name);

            var receipt = await RequestHelper.GetReceipt(kvitteringsforespørselEnvelope).ConfigureAwait(false);

            var transportReceiptXml = receipt.Xml;

            if (receipt is TomKøKvittering)
            {
                Log.Debug($"{receipt}");
                SecurityValidationOfEmptyQueueReceipt(transportReceiptXml, kvitteringsforespørselEnvelope.Xml());
            }
            else if (receipt is Forretningskvittering)
            {
                Log.Debug($"{receipt}");
                SecurityValidationOfMessageReceipt(transportReceiptXml, kvitteringsforespørselEnvelope);
            }

            else if (receipt is Transportkvittering)
            {
                Log.Debug($"{receipt}");
            }

            return(receipt);
        }
 public StandardBusinessDocumentHeader(EnvelopeSettings settings, XmlDocument context, DateTime creationDateAndTime)
     : base(settings, context)
 {
     _creationDateAndtime = creationDateAndTime;
 }
コード例 #11
0
 public FysiskPostInfoElement(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
     _fysiskPostInfo = (FysiskPostInfo) Settings.Forsendelse.PostInfo;
     _returmottaker = _fysiskPostInfo.Returpostmottaker;
 }
 public StandardBusinessDocumentHeader(EnvelopeSettings settings, XmlDocument context, DateTime creationDateAndTime)
     : base(settings, context)
 {
     _creationDateAndtime = creationDateAndTime;
 }
 public KvitteringsforespørselEnvelope(EnvelopeSettings settings) : base(settings)
 {
 }
コード例 #14
0
 protected EnvelopeXmlPart(EnvelopeSettings settings, XmlDocument context)
 {
     Settings = settings;
     Context = context;
 }
 public KvitteringsforespørselEnvelope(EnvelopeSettings envelopeSettings)
     : base(envelopeSettings)
 {
 }
 public KvitteringsbekreftelseEnvelope(EnvelopeSettings settings)
     : base(settings)
 {
 }
コード例 #17
0
 public FysiskPostInfoElement(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
     _fysiskPostInfo = (FysiskPostInfo)Settings.Forsendelse.PostInfo;
     _returmottaker  = _fysiskPostInfo.Returpostmottaker;
 }
コード例 #18
0
 public DigitalPostElement(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
     _managedSha256 = new SHA256Managed();
 }
 public ForretningsmeldingEnvelope(EnvelopeSettings settings)
     : base(settings)
 {
 }
コード例 #20
0
 protected AbstractHeader(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
コード例 #21
0
 public KvitteringsbekreftelseMessaging(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
 public KvitteringsbekreftelseMessaging(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
コード例 #23
0
 public ForretningsmeldingEnvelope(EnvelopeSettings settings) : base(settings)
 {
 }
コード例 #24
0
 protected AbstractHeader(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
コード例 #25
0
 /// <summary>
 /// Validate the object.
 /// </summary>
 /// <exception cref="ValidationException">
 /// Thrown if validation fails
 /// </exception>
 public virtual void Validate()
 {
     if (ValidationSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "ValidationSettings");
     }
     if (FramingSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "FramingSettings");
     }
     if (EnvelopeSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "EnvelopeSettings");
     }
     if (AcknowledgementSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "AcknowledgementSettings");
     }
     if (MessageFilter == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "MessageFilter");
     }
     if (SecuritySettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "SecuritySettings");
     }
     if (ProcessingSettings == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "ProcessingSettings");
     }
     if (SchemaReferences == null)
     {
         throw new ValidationException(ValidationRules.CannotBeNull, "SchemaReferences");
     }
     if (ValidationSettings != null)
     {
         ValidationSettings.Validate();
     }
     if (FramingSettings != null)
     {
         FramingSettings.Validate();
     }
     if (EnvelopeSettings != null)
     {
         EnvelopeSettings.Validate();
     }
     if (AcknowledgementSettings != null)
     {
         AcknowledgementSettings.Validate();
     }
     if (MessageFilter != null)
     {
         MessageFilter.Validate();
     }
     if (SecuritySettings != null)
     {
         SecuritySettings.Validate();
     }
     if (ProcessingSettings != null)
     {
         ProcessingSettings.Validate();
     }
     if (EnvelopeOverrides != null)
     {
         foreach (var element in EnvelopeOverrides)
         {
             if (element != null)
             {
                 element.Validate();
             }
         }
     }
     if (ValidationOverrides != null)
     {
         foreach (var element1 in ValidationOverrides)
         {
             if (element1 != null)
             {
                 element1.Validate();
             }
         }
     }
     if (MessageFilterList != null)
     {
         foreach (var element2 in MessageFilterList)
         {
             if (element2 != null)
             {
                 element2.Validate();
             }
         }
     }
     if (SchemaReferences != null)
     {
         foreach (var element3 in SchemaReferences)
         {
             if (element3 != null)
             {
                 element3.Validate();
             }
         }
     }
     if (X12DelimiterOverrides != null)
     {
         foreach (var element4 in X12DelimiterOverrides)
         {
             if (element4 != null)
             {
                 element4.Validate();
             }
         }
     }
 }
コード例 #26
0
 public KvitteringsforespørselMessaging(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
コード例 #27
0
 public DigitalPostElement(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
     _managedSha256 = new SHA256Managed();
 }
 public KvitteringsforespørselHeader(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
 public StandardBusinessDocument(EnvelopeSettings settings, XmlDocument context) : base(settings, context)
 {
     _creationDateAndtime = DateTime.UtcNow;
 }
 public ForretningsmeldingHeader(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
 public ForretningsmeldingMessaging(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
 }
コード例 #32
0
 protected AbstractEnvelope(EnvelopeSettings settings)
 {
     Settings    = settings;
     EnvelopeXml = LagXmlRotnode();
 }
 public ForretningsmeldingBody(EnvelopeSettings settings, XmlDocument context) : base(settings, context)
 {
 }
 public StandardBusinessDocument(EnvelopeSettings settings, XmlDocument context)
     : base(settings, context)
 {
     _creationDateAndtime = DateTime.UtcNow;
 }
コード例 #35
0
 public KvitteringsbekreftelseEnvelope(EnvelopeSettings settings) : base(settings)
 {
 }
コード例 #36
0
 protected AbstractEnvelope(EnvelopeSettings settings)
 {
     Settings = settings;
     EnvelopeXml = LagXmlRotnode();
 }