/// <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)); }
public void ReturnererReturpostkvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.ReturpostkvitteringXml(); const string konversasjonsId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87"; const string meldingsId = "7142d8ab-9408-4cb5-8b80-dca3618dd722"; const string tidspunkt = "2015-11-10T08:26:49.797+01:00"; IntegrasjonspunktKvittering ipkvittering = new IntegrasjonspunktKvittering( 1L, DateTime.Parse(tidspunkt), IntegrasjonspunktKvitteringType.ANNET, "", xml.InnerXml, Guid.Parse(konversasjonsId), Guid.Parse(meldingsId), 1L); //Act var kvittering = KvitteringFactory.GetKvittering(ipkvittering); //Assert Assert.IsType <Returpostkvittering>(kvittering); }
public void ReturnererTomKøKvittering() { //Arrange var xml = KvitteringsUtility.Transportkvittering.TomKøKvitteringXml(); //Act var kvittering = KvitteringFactory.GetKvittering(xml); //Assert Assert.IsInstanceOfType(kvittering, typeof(TomKøKvittering)); }
public void ReturnererÅpningskvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.ÅpningskvitteringXml(); //Act var kvittering = KvitteringFactory.GetKvittering(xml); //Assert Assert.IsInstanceOfType(kvittering, typeof(Åpningskvittering)); }
public void ReturnererTomKøKvittering() { //Arrange var xml = KvitteringsUtility.Transportkvittering.TomKøKvitteringXml(); //Act var kvittering = KvitteringFactory.GetKvittering(xml); //Assert Assert.IsType <TomKøKvittering>(kvittering); }
public void ReturnererÅpningskvittering() { //Arrange var xml = KvitteringsUtility.Forretningskvittering.ÅpningskvitteringXml(); //Act var kvittering = KvitteringFactory.GetKvittering(xml); //Assert Assert.IsType <Åpningskvittering>(kvittering); }
/// <summary> /// Sender en forsendelse til meldingsformidler. Dersom noe feilet i sendingen til meldingsformidler, vil det kastes en /// exception. /// </summary> /// <param name="forsendelse"> /// Et objekt som har all informasjon klar til å kunne sendes (mottakerinformasjon, sertifikater, /// vedlegg mm), enten digitalt eller fysisk. /// </param> /// <param name="lagreDokumentpakke">Hvis satt til true, så lagres dokumentpakken på Klientkonfigurasjon.StandardLoggSti.</param> public async Task <Transportkvittering> SendAsync(Forsendelse forsendelse, bool lagreDokumentpakke = false) { Logging.Log(TraceEventType.Information, forsendelse.KonversasjonsId, "Sender ny forsendelse til meldingsformidler."); var guidHandler = new GuidUtility(); var arkiv = LagAsicEArkiv(forsendelse, lagreDokumentpakke, guidHandler); var forretningsmeldingEnvelope = LagForretningsmeldingEnvelope(forsendelse, arkiv, guidHandler); Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, arkiv.Signatur.Xml().OuterXml, true, true, "Sendt - Signatur.xml"); Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, arkiv.Manifest.Xml().OuterXml, true, true, "Sendt - Manifest.xml"); Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, forretningsmeldingEnvelope.Xml().OuterXml, true, true, "Sendt - Envelope.xml"); try { ValiderForretningsmeldingEnvelope(forretningsmeldingEnvelope.Xml()); ValiderArkivManifest(arkiv.Manifest.Xml()); ValiderArkivSignatur(arkiv.Signatur.Xml()); } catch (Exception e) { throw new Exception("Sending av forsendelse feilet under validering. Feilmelding: " + e.GetBaseException(), e.InnerException); } var soapContainer = LagSoapContainer(forretningsmeldingEnvelope, arkiv); var transportkvitteringRådata = await SendSoapContainer(soapContainer); Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, transportkvitteringRådata, true, true, "Mottatt - Meldingsformidlerespons.txt"); Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, new byte[1], true, false, "Sendt - SOAPContainer.txt"); Logging.Log(TraceEventType.Information, forsendelse.KonversasjonsId, "Kvittering for forsendelse" + Environment.NewLine + transportkvitteringRådata); var transportKvittering = (Transportkvittering)KvitteringFactory.GetKvittering(transportkvitteringRådata); var transportkvitteringXml = new XmlDocument(); transportkvitteringXml.LoadXml(transportkvitteringRådata); SikkerhetsvalideringAvTransportkvittering(transportkvitteringXml, forretningsmeldingEnvelope.Xml(), guidHandler); return(transportKvittering); }
/// <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> public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering) { if (forrigeKvittering != null) { await BekreftAsync(forrigeKvittering).ConfigureAwait(false); } var guidUtility = new GuidUtility(); _logger.LogDebug($"Utgående kvitteringsforespørsel, messageId '{guidUtility.MessageId}'."); int GUARD = 100; for (int i = 0; i < GUARD; i++) { IntegrasjonspunktKvittering ipKvittering = await RequestHelper.GetReceipt(); if (ipKvittering == null) { return(new TomKøKvittering()); } var shouldFetchKvitteringAgain = ipKvittering.status == IntegrasjonspunktKvitteringType.SENDT || ipKvittering.status == IntegrasjonspunktKvitteringType.OPPRETTET; if (shouldFetchKvitteringAgain) { await RequestHelper.ConfirmReceipt(ipKvittering.id); } else { return(KvitteringFactory.GetKvittering(ipKvittering)); } } _logger.LogWarning( $"Antall forsøk på å hente kvittering overskredet. Det kan komme av det er mange {IntegrasjonspunktKvitteringType.SENDT}- og {IntegrasjonspunktKvitteringType.OPPRETTET}-kvitteringer på integrasjonspunktkøen. Prøv igjen."); return(null); }
private static Transportkvittering ValiderTransportkvittering(string meldingsformidlerRespons, XmlDocument forretningsmeldingEnvelope, GuidUtility guidHandler) { try { var valideringAvRespons = new Responsvalidator(meldingsformidlerRespons, forretningsmeldingEnvelope); valideringAvRespons.ValiderHeaderSignatur(); valideringAvRespons.ValiderDigest(guidHandler); } catch (Exception e) { var transportFeiletKvittering = KvitteringFactory.GetTransportkvittering(meldingsformidlerRespons); if (transportFeiletKvittering is TransportOkKvittering) { throw new SdpSecurityException("Validering av signatur og digest på respons feilet.", e); } return(transportFeiletKvittering); } return(KvitteringFactory.GetTransportkvittering(meldingsformidlerRespons)); }
/// <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); }
public async Task <Kvittering> GetReceipt(KvitteringsforespørselEnvelope kvitteringsforespørselEnvelope) { var result = await Send(kvitteringsforespørselEnvelope).ConfigureAwait(false); return(KvitteringFactory.GetKvittering(result)); }
public async Task <Kvittering> SendMessage(ForretningsmeldingEnvelope envelope, DocumentBundle asiceDocumentBundle) { var result = await Send(envelope, asiceDocumentBundle).ConfigureAwait(false); return(KvitteringFactory.GetKvittering(result)); }