.net - Hvornår skal jeg ringe MessageQueue.EndReceive ()?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har set på eksempelkode for en tjeneste, der behandler meddelelser fra MSMQ. I koden hedder EndReceive () -metoden med det samme i begyndelsen af ​​ReceiveCompletedEventHandler, hvorefter den begynder at behandle meddelelsen. Er det bare mig, eller savner det helt MSMQ-pålideligheden? Shouldn 't EndReceive () kun kaldes en gang en besked er blevet håndteret fuldt ud?

Bedste reference


EndReceive betyder bare, at meddelelsen blev leveret med succes - det betyder ikke noget om, hvorvidt du var i stand til at gøre noget, der var umagen værd med det.


Det lyder som om du overvejer en asynkron transaktionslæsning fra MSMQ, hvor du kun vil færdiggøre kvitteringen (fjern meddelelsen fra køen en gang for alle), når du håndterer din meddelelse, uanset hvad det kan betyde i din sammenhæng. Men asynkron transaktionsmæssige læsninger er ikke mulige - se MSDN-dokumentationen: [2]



  Brug ikke det asynkrone opkald
  Begynder med transaktioner. hvis du
  ønsker at udføre en transaktionsmæssig
  asynkron drift, opkald
  StartPeek, og læg transaktionen og
  den (synkron) modtagelsesmetode
  inden for event handlinger du opretter
  til kiggeringen.