I originally marked Application Message End (AME) and Transaction End
(TE) messages as optional: Transaction End (TE) implied the end of
corresponding data flows, while Connection End (CE) implied the end
of all transactions. The motivation was simple: these messages are not
required under some common circumstances, and we want to keep chatter
to the minimum.
First implementation experience showed that it may be confusing to
coders when an AME or TE message should be sent. Not sending a
termination message is likely to cause timeouts because the other side
often has to wait for the end of the message to proceed. However, the
bug may not be detected early enough because some services will not
wait and successfully terminate transactions on their own.
Would anybody be against making these messages required for normal
transaction termination? I think the protocol will be more clear if we
do so. IIRC, Oskar Batuner has already argued that these messages
should be explicit. The drawback is that it would not be possible to
normally terminate a connection with 10 ended transactions without
sending 10 TE messages first, but such a situation is probably rare.
Again, this is a pure "clarity" issue: Correct implementations would
not benefit from having explicit AMEs and TEs, but we might get more
correct implementations or ease development if AMEs and TEs are made
explicit/required.
Thanks,
Alex.