private static async Task <Kvittering> HentKvitteringOgBekreftAsync(SikkerDigitalPostKlient sdpKlient, string testBeskrivelse, Forsendelse forsendelse) { const int hentKvitteringMaksAntallGanger = 10; var hentKvitteringPåNytt = true; var prøvdPåNytt = 0; Kvittering kvittering = null; while (hentKvitteringPåNytt && (prøvdPåNytt++ <= hentKvitteringMaksAntallGanger)) { Thread.Sleep(500); var kvitteringsforespørsel = new Kvitteringsforespørsel(forsendelse.Prioritet, forsendelse.MpcId); kvittering = await sdpKlient.HentKvitteringAsync(kvitteringsforespørsel); if (kvittering is TomKøKvittering) { continue; } hentKvitteringPåNytt = false; await sdpKlient.BekreftAsync((Forretningskvittering)kvittering); var konversasjonsId = HentKonversasjonsIdFraKvittering(kvittering); if (konversasjonsId != forsendelse.KonversasjonsId) { throw new FieldAccessException( $"Fikk ikke til å hente kvittering for test '{testBeskrivelse}' -- det ble hentet feil kvittering eller ingen kvittering. Var du for rask å hente, " + "eller har noe skjedd galt med hvilken kø du henter fra?"); } } return(kvittering); }
/// <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)); }
private static async void HentKvitteringer(SikkerDigitalPostKlient sikkerDigitalPostKlient) { Log.Debug(""); Log.Debug(@" > Starter å hente kvitteringer ..."); Thread.Sleep(3000); while (true) { var kvitteringsForespørsel = new Kvitteringsforespørsel(Prioritet.Prioritert, MpcId); Log.Debug($" > Henter kvittering på kø '{kvitteringsForespørsel.Mpc}'..."); var kvittering = await sikkerDigitalPostKlient.HentKvitteringAsync(kvitteringsForespørsel).ConfigureAwait(false); if (kvittering is TomKøKvittering) { Console.WriteLine($" - Kø '{kvitteringsForespørsel.Mpc}' er tom. Venter og prover igjen. "); Thread.Sleep(3000); continue; } if (kvittering is TransportFeiletKvittering) { var feil = ((TransportFeiletKvittering) kvittering).Beskrivelse; WriteToConsoleWithColor( "En feil skjedde under transport. Forespørsel for kvittering ble ikke godtatt av Meldingsformidler: " + feil, true); break; } if (kvittering is Leveringskvittering) { WriteToConsoleWithColor(" - En leveringskvittering ble hentet!"); } if (kvittering is Åpningskvittering) { WriteToConsoleWithColor(" - Har du sett. Noen har åpnet et brev. Moro."); } if (kvittering is Returpostkvittering) WriteToConsoleWithColor(" - Du har fått en returpostkvittering for fysisk post."); if (kvittering is Mottakskvittering) WriteToConsoleWithColor(" - Kvittering på sending av fysisk post mottatt."); if (kvittering is Feilmelding) { var feil = (Feilmelding) kvittering; WriteToConsoleWithColor(" - En feilmelding ble hentet :" + feil.Detaljer, true); } Console.WriteLine(@" - Bekreftelse på mottatt kvittering sendes ..."); sikkerDigitalPostKlient.Bekreft((Forretningskvittering) kvittering); Console.WriteLine(@" - Kvittering sendt."); } }
private Kvittering GetSingleKvittering() { Thread.Sleep(3000); var kvitteringsforespørsel = new Kvitteringsforespørsel(); var kvittering = _klient.HentKvittering(kvitteringsforespørsel); return(kvittering); }
private Kvittering GetSingleKvittering() { Thread.Sleep(3000); var kvitteringsforespørsel = new Kvitteringsforespørsel(_forsendelse.Prioritet, _forsendelse.MpcId); var kvittering = _klient.HentKvittering(kvitteringsforespørsel); return(kvittering); }
private async Task <int> HentKvitteringOgBekreft(SikkerDigitalPostKlient sdpKlient, string testBeskrivelse, string mpcId, Forsendelse forsendelse) { var hentKvitteringPåNytt = true; var prøvdPåNytt = 0; while (hentKvitteringPåNytt && (prøvdPåNytt++ <= _hentKvitteringerMaksAntallGanger)) { Thread.Sleep(1000); var kvitteringsforespørsel = new Kvitteringsforespørsel(Prioritet.Prioritert, mpcId); var kvittering = await sdpKlient.HentKvitteringAsync(kvitteringsforespørsel); if (kvittering == null) { continue; } sdpKlient.Bekreft((Forretningskvittering)kvittering); hentKvitteringPåNytt = false; var konversasjonsId = Guid.Empty; if (kvittering is Feilmelding) { var feilmelding = (Feilmelding)kvittering; konversasjonsId = feilmelding.KonversasjonsId; Assert.Fail("Test '{0}' feilet. Feilmelding fra Meldingsformidler: {1}", testBeskrivelse, feilmelding.Detaljer); } if (kvittering is Leveringskvittering) { var leveringskvittering = (Leveringskvittering)kvittering; konversasjonsId = leveringskvittering.KonversasjonsId; } if (konversasjonsId.ToString() != forsendelse.KonversasjonsId.ToString()) { throw new FieldAccessException( string.Format( "Fikk ikke til å hente kvittering for test '{0}' -- det ble hentet feil kvittering eller ingen kvittering. Var du for rask å hente, " + "eller har noe skjedd galt med hvilken kø du henter fra?", testBeskrivelse)); } } return(prøvdPåNytt); }
/// <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); }
/// <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); }
/// <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 Kvittering HentKvitteringOgBekreftForrige(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering) { return(HentKvitteringOgBekreftForrigeAsync(kvitteringsforespørsel, forrigeKvittering).Result); }
/// <summary> /// Forespør kvittering for forsendelser. 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> /// <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> HentKvitteringAsync(Kvitteringsforespørsel kvitteringsforespørsel) { return(await HentKvitteringOgBekreftForrigeAsync(kvitteringsforespørsel, null)); }
/// <summary> /// Forespør kvittering for forsendelser. 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> /// <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 Kvittering HentKvittering(Kvitteringsforespørsel kvitteringsforespørsel) { return(HentKvitteringOgBekreftForrige(kvitteringsforespørsel, null)); }
private static async void HentKvitteringer(SikkerDigitalPostKlient _sikkerDigitalPostKlient) { Console.WriteLine(); Console.WriteLine(" > Starter å hente kvitteringer ..."); Thread.Sleep(3000); while (true) { var kvitteringsForespørsel = new Kvitteringsforespørsel(Prioritet.Prioritert, MpcId); Console.WriteLine(" > Henter kvittering på kø '{0}'...", kvitteringsForespørsel.Mpc); Kvittering kvittering = await _sikkerDigitalPostKlient.HentKvitteringAsync(kvitteringsForespørsel); if (kvittering == null) { Console.WriteLine(" - Kø '{0}' er tom. Stopper å hente meldinger. ", kvitteringsForespørsel.Mpc); break; } if (kvittering is TransportFeiletKvittering) { var feil = ((TransportFeiletKvittering)kvittering).Beskrivelse; WriteToConsoleWithColor( "En feil skjedde under transport. Forespørsel for kvittering ble ikke godtatt av Meldingsformidler: " + feil, isError: true); break; } if (kvittering is Leveringskvittering) { WriteToConsoleWithColor(" - En leveringskvittering ble hentet!"); } if (kvittering is Åpningskvittering) { WriteToConsoleWithColor(" - Har du sett. Noen har åpnet et brev. Moro."); } if (kvittering is Returpostkvittering) { WriteToConsoleWithColor(" - Du har fått en returpostkvittering for fysisk post."); } if (kvittering is Mottakskvittering) { WriteToConsoleWithColor(" - Kvittering på sending av fysisk post mottatt."); } if (kvittering is Feilmelding) { var feil = (Feilmelding)kvittering; WriteToConsoleWithColor(" - En feilmelding ble hentet :" + feil.Detaljer, true); } Console.WriteLine(" - Bekreftelse på mottatt kvittering sendes ..."); _sikkerDigitalPostKlient.Bekreft((Forretningskvittering)kvittering); Console.WriteLine(" - Kvittering sendt."); } }
public void NyKlientOgSend() { var klientKonfig = new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø); Databehandler databehandler = null; //Som initiert tidligere Forsendelse forsendelse = null; //Som initiert tidligere var sdpKlient = new SikkerDigitalPostKlient(databehandler, klientKonfig); var transportkvittering = sdpKlient.Send(forsendelse); if (transportkvittering is TransportOkKvittering) { //Når alt går fint } else if (transportkvittering is TransportFeiletKvittering) { var beskrivelse = ((TransportFeiletKvittering)transportkvittering).Beskrivelse; } //////////////////////////////////////// // Eksempel for henting av kvittering //////////////////////////////////////// var køId = "MpcId"; var kvitteringsForespørsel = new Kvitteringsforespørsel(Prioritet.Prioritert, køId); Console.WriteLine(" > Henter kvittering på kø '{0}'...", kvitteringsForespørsel.Mpc); Kvittering kvittering = sdpKlient.HentKvittering(kvitteringsForespørsel); if (kvittering == null) { Console.WriteLine(" - Kø '{0}' er tom. Stopper å hente meldinger. ", kvitteringsForespørsel.Mpc); } if (kvittering is TransportFeiletKvittering) { var feil = ((TransportFeiletKvittering)kvittering).Beskrivelse; Console.WriteLine("En feil skjedde under transport."); } if (kvittering is Leveringskvittering) { Console.WriteLine(" - En leveringskvittering ble hentet!"); } if (kvittering is Åpningskvittering) { Console.WriteLine(" - Har du sett. Noen har åpnet et brev. Moro."); } if (kvittering is Returpostkvittering) { Console.WriteLine(" - Du har fått en returpostkvittering for fysisk post."); } if (kvittering is Mottakskvittering) { Console.WriteLine(" - Kvittering på sending av fysisk post mottatt."); } if (kvittering is Feilmelding) { var feil = (Feilmelding)kvittering; Console.WriteLine(" - En feilmelding ble hentet :" + feil.Detaljer, true); } ////////////////////////////////////////// /// Bekreft ///////////////////////////////////////// sdpKlient.Bekreft((Forretningskvittering)kvittering); }
public void OpprettKlientOgSendPost() { var integrasjonsPunktLocalHostMiljø = new Miljø(new Uri("http://127.0.0.1:9093")); var klientKonfig = new Klientkonfigurasjon(integrasjonsPunktLocalHostMiljø); Databehandler databehandler = null; //Som initiert tidligere Forsendelse forsendelse = null; //Som initiert tidligere var sdpKlient = new SikkerDigitalPostKlient(databehandler, klientKonfig); var transportkvittering = sdpKlient.Send(forsendelse); if (transportkvittering is TransportOkKvittering) { //Når sending til integrasjonspunkt har gått fint. } else if (transportkvittering is TransportFeiletKvittering) { var beskrivelse = ((TransportFeiletKvittering)transportkvittering).Beskrivelse; } //Hent kvitteringer var kvitteringsForespørsel = new Kvitteringsforespørsel(); Console.WriteLine(" > Henter kvittering på kø..."); Kvittering kvittering = sdpKlient.HentKvittering(kvitteringsForespørsel); if (kvittering is TomKøKvittering) { Console.WriteLine(" - Kø er tom. Stopper å hente meldinger. "); } if (kvittering is TransportFeiletKvittering) { var feil = ((TransportFeiletKvittering)kvittering).Beskrivelse; Console.WriteLine("En feil skjedde under transport."); } if (kvittering is Leveringskvittering) { Console.WriteLine(" - En leveringskvittering ble hentet!"); } if (kvittering is Åpningskvittering) { Console.WriteLine(" - Noen har åpnet et brev."); } if (kvittering is Returpostkvittering) { Console.WriteLine(" - Du har fått en returpostkvittering for fysisk post."); } if (kvittering is Mottakskvittering) { Console.WriteLine(" - Kvittering på sending av fysisk post mottatt."); } if (kvittering is Feilmelding) { var feil = (Feilmelding)kvittering; Console.WriteLine(" - En feilmelding ble hentet :" + feil.Detaljer, true); } //Husk at det ikke er mulig å hente nye kvitteringer før du har bekreftet mottak av nåværende. sdpKlient.Bekreft((Forretningskvittering)kvittering); }