WsrmService (2018-4)

Denne service gør det muligt for webserviceaftagerne at hente og kvittere for modtagelsen af beskeder fra DFDG. Se også den tværgående beskrivelse om Modtagelse af WSRM beskeder

Forretningsbeskrivelse

Implementeringen er inspireret af OASIS specifikationen Web Services Reliable Messaging (WS-ReliableMessaging) af 14. marts 2006, men følger ikke standarden, da det på implementeringstidspunktet ikke var muligt for en af de væsentligste aftagere selv at udstille de krævede webservices.

Istedet er implementeringen vendt sådan at aftagerne med korte intervaller poller DFDG for at se om der er nye beskeder på køen. Når der er beskeder på køen bliver aftager via en special struktur (WSRM Sequence) instrueret i hvilke beskeder der skal hentes via hvilke webservices.

De services, der er en del af WSRM kommunikationen (dvs. de services, der leverer beskeder til aftageren), som er indeholdt i en WSRM Sequence, benytter specifikke WSRM SOAP Header beskeder til input og output. Det er nødvendigt, at aftageren benytter disse headere, da det ellers ikke vil være muligt at benytte servicen.

Servicen indeholder tre webservicemetoder i version 3, der er nødvendige for at implementere WS-ReliableMessaging-protokollen:

  • CreateSequence: initierer en pålidelig overførsel af meddelelser og returnerer en beskrivelse af hvilke meddelelser, der er klar til afhentning.
  • CloseSequence: bruges til at afbryde en pålidelig overførsel inden normal afslutning. Hele overførslen betragtes som annulleret, og serveren vil derfor ikke slette beskeder, som er blevet sendt i den pågældende overførsel, ligesom aftageren vil få disse sendt beskeder igen ved næste overførsel.
  • TerminateSequence: afslutter en korrekt gennemført overførsel efter det er konstateret, at alle meddelelser i overførslen er modtaget korrekt.

WsrmService v3

Kaldesekvensen er som følger:

  1. Kald CreateSequence
    1. Hvis eksisterende sekvens er åbne kald CloseSequence og kald CreateSequence igen
    2. Get Identifier som returnes i sekvensen, denne skal bruges i det efterfølgende.
  2. Kald de angivne GetXXX - se mere under CreateSequence
    1. Angiv sekvensens Identifier i SOAP header elementet SequenceRequest elementet
    2. Gem MessageNumber som returneres i SOAP header Sequence elementet
  3. Er alt gået godt?
    1. JA => Kald TerminateSequence med sekvensens Identifier
    2. NEJ => Kald CloseSequence med sekvensens Identifier og prøv igen.

Se f.eks. WsrmMessageService for eksempler på GetXXX WSRM metoder.


Link til snitfladebeskrivelser


Link til forretningsbeskrivelser 

 

Found 2 search result(s) for WsrmService.

Metoder

CreateSequence

Ved kald af CreateSequence kan alle SOAP Body elementer sættes til NULL. Der er planlagt en oprydning så disse parametre fjernes fra servicen.

SubQueueIdentifier skal dog angives, hvis der skal kaldes en subkø.

Denne metode benyttes til at initiere en WSRM overførsel af meddelelser. Der returneres en beskrivelse af hvilke meddelelser, der er klar til afhentning (service inventory), der returneres højest 500 beskeder pr. afhentning. Et service inventory kunne f.eks. så således ud:

<CreateSequenceResponseType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Identifier xmlns="http://docs.oasis-open.org/ws-rx/wsrm/200602">ac6b4250-21cd-43a5-964b-5ecd5f70f1b6</Identifier>
  <ServiceInventoryCollection xmlns="http://docs.oasis-open.org/ws-rx/wsrm/200602">
    <ServiceItem>
      <ServiceName>GetUnemploymentEnrollmentVersion4</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>35</MessageCount>
    </ServiceItem>
    <ServiceItem>
      <ServiceName>GetCancelUnemploymentEnrollmentVersion4</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>59</MessageCount>
    </ServiceItem>
    <ServiceItem>
      <ServiceName>GetContactGroupVersion4</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>158</MessageCount>
    </ServiceItem>
    <ServiceItem>
      <ServiceName>GetPersonProfessionCollectionVersion4</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>34</MessageCount>
    </ServiceItem>
    <ServiceItem>
      <ServiceName>GetWarningVersion4</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>27</MessageCount>
    </ServiceItem>
    <ServiceItem>
      <ServiceName>GetCVStatusVersion6</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>2</MessageCount>
    </ServiceItem>
    <ServiceItem>
      <ServiceName>GetCVObservationVersion5</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>27</MessageCount>
    </ServiceItem>
    <ServiceItem>
      <ServiceName>GetContactGroupVersion5</ServiceName>
      <ServiceEndpoint>https://serviceT2.startest.dk/PjaktassWCFTservice/10/WsrmMessageService.svc</ServiceEndpoint>
      <MessageCount>158</MessageCount>
    </ServiceItem>
  </ServiceInventoryCollection>
</CreateSequenceResponseType>

Dette eksempel viser, at der er oprettet en sekvens med Identifier="ac6b4250-21cd-43a5-964b-5ecd5f70f1b6" og at der venter 8 forskellige meddelelsestyper med hhv. 35, 59, 158, osv. enkeltbeskeder for hver type. I strukturen returneres også URL til webservicen samt metodenavnet på den WSRM GetXXX operation der skal kaldes.

Serviceaftageren skal derefter kalde alle de nævnte services, i SOAP header for hver GetXXX operation skal Identifier for sekvensen angives i elementet SequenceRequest. Hver GetXXX metode returnerer en collection med det pågældende antal beskeder.

Når alle services er kaldt og meddelelserne er hentet korrekt skal aftager markere dette ved at lukke sekvensen (commit) via "TerminateSequence". Hvis aftageren ikke har hentet og accepteret alle meddelelser i sequencen, kan sequencen ikke termineres, og det er ikke muligt at oprette nye sekvenser.

Hvis aftager ikke mener at beskederne i sekvensen er afhentet korrekt kan afhentningen rulles tilbage via CloseSequence.

Ingen beskeder ved kald af CreateSequence

Hvis kaldet til CreateSequence returnerer en ServiceInventoryCollection med 0 ServiceItems, er der ikke nogen WSRM beskeder at hente for den kaldende aftager.

Sekvensen med Identifier som identifikation lukkes i denne situation automatisk af DFDG, og afhentning kan startes forfra med CreateSequence.

Fejl ved kald af CreateSequence

Hvis kaldet til CreateSequence fejler returneres en WSRM specifik fejlstruktur der udover de normale elementer i FaultDetails indeholder et ID af typen GUID. Ved fejl:

  • FaultCode: 4006 - Create WS-RM Sequence refused, open sequence exists

vil dette felt indeholde Identifier på den åbne sekvens. Afhentning kan herefter fortsættes eller sekvensen kan lukkes (anbefales) og afhentning startes forfra.

CloseSequence

Denne metode benyttes til at afbryde en pålidelig overførsel inden normal afslutning. Hele overførslen betragtes som annulleret, og serveren vil derfor ikke slette beskeder, som er blevet sendt i den pågældende overførsel, ligesom aftageren vil få disse sendt beskeder igen ved næste overførsel.

TerminateSequence

Denne metode benyttes til at afslutte en korrekt gennemført overførsel efter det er konstateret, at alle meddelelser i overførslen er modtaget korrekt.

Fejlhåndtering

I følgende vises en oversigt over de Soap Faults der kan komme fra WSRMservice eller de services der er en del af en WSRM sekvens.

FaultcodeFaultstringBeskrivelse
4001The WS-RM Sequence Status is set to TerminatedDen sekvens (Identifier) der refereres til er allerede afsluttet.
4002The WS-RM Sequence Status is set to FaultedDen sekvens (Identifier) der refereres til er gået i fejltilstand. Kald CloseSequence for at afslutte den.
4003The WS-RM Sequence Status is set to EndedAlle beskeder i sekvensen er allerede afhentet
4004The WS-RM Sequence Status is set to None
4006Create WS-RM Sequence refused, open sequence existsDer eksisterer en åbne sekvens, luk denne først. Se ID i fejlbeskeden.
4007The message has not been transmittedDer er forsøgt at kvittere for en GetXXX metode uden at GetXXX er forsøgt kaldt
4008Not all messages in the WS-RM Sequence was transmittedIkke alle GetXXX metoder angivet i sekvensen er blevet kaldt
4009The number of WS-RM Max-TransmitAttempts has been ex-ceededHver GetXXX metode må højst blive kaldt 3 gange. Eneste udvej er at kalde CloseSequence
4010This Service is not part for the selected Sequence InventoryDen kaldte GetXXX metode er ikke del af den angivne sekvens.
4011This Service requires the use of WS-RMEn GetXX metode kan ikke kaldes uden for en WSRM Sekvens, metoden kræver en udfyldt SequenceRequest SOAP header.
4013Unknown Client DestinationDen organisation/myndighed der er angivet har ikke tilknyttet en WSRM kø
9182The user is not authorized to read messages on this queueDet certifikat der er benyttet har ikke adgang til at hente på den pågældende kø