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:
- Kald CreateSequence
- Hvis eksisterende sekvens er åbne kald CloseSequence og kald CreateSequence igen
- Get Identifier som returnes i sekvensen, denne skal bruges i det efterfølgende.
- Kald de angivne GetXXX - se mere under CreateSequence
- Angiv sekvensens Identifier i SOAP header elementet SequenceRequest elementet
- Gem MessageNumber som returneres i SOAP header Sequence elementet
- Er alt gået godt?
- JA => Kald TerminateSequence med sekvensens Identifier
- NEJ => Kald CloseSequence med sekvensens Identifier og prøv igen.
Se f.eks. WsrmMessageService for eksempler på GetXXX WSRM metoder.
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.
Faultcode | Faultstring | Beskrivelse |
---|---|---|
4001 | The WS-RM Sequence Status is set to Terminated | Den sekvens (Identifier) der refereres til er allerede afsluttet. |
4002 | The WS-RM Sequence Status is set to Faulted | Den sekvens (Identifier) der refereres til er gået i fejltilstand. Kald CloseSequence for at afslutte den. |
4003 | The WS-RM Sequence Status is set to Ended | Alle beskeder i sekvensen er allerede afhentet |
4004 | The WS-RM Sequence Status is set to None | |
4006 | Create WS-RM Sequence refused, open sequence exists | Der eksisterer en åbne sekvens, luk denne først. Se ID i fejlbeskeden. |
4007 | The message has not been transmitted | Der er forsøgt at kvittere for en GetXXX metode uden at GetXXX er forsøgt kaldt |
4008 | Not all messages in the WS-RM Sequence was transmitted | Ikke alle GetXXX metoder angivet i sekvensen er blevet kaldt |
4009 | The number of WS-RM Max-TransmitAttempts has been ex-ceeded | Hver GetXXX metode må højst blive kaldt 3 gange. Eneste udvej er at kalde CloseSequence |
4010 | This Service is not part for the selected Sequence Inventory | Den kaldte GetXXX metode er ikke del af den angivne sekvens. |
4011 | This Service requires the use of WS-RM | En GetXX metode kan ikke kaldes uden for en WSRM Sekvens, metoden kræver en udfyldt SequenceRequest SOAP header. |
4013 | Unknown Client Destination | Den organisation/myndighed der er angivet har ikke tilknyttet en WSRM kø |
9182 | The user is not authorized to read messages on this queue | Det certifikat der er benyttet har ikke adgang til at hente på den pågældende kø |