We are using a pub-sub model in our WCF application that pretty much follows the Microsoft sample: Design Patterns: List-Based Publish-Subscribe.
Whilst the service provides a notion of subscribe()
and unsubscribe()
, what is the best practice to handle the cleanup in the situation when a client dies or the channel faults? Currently, when a client subscribes I attach to handlers to the current InstanceContext
's Closed
and Faulted
events (the service users an PerSession instance context mode and netTcpBinding):
_communicationObject = OperationContext.Current.InstanceContext;
_communicationObject.Closed += OnClientLost;
_communicationObject.Faulted += OnClientLost;
The OnClientLost
handler simply unsubscribes the client, however:
- Is the above a good practice and alone robust enough to catch all situations when a client drops off the duplex communication? Or should the service just handle exceptions encountered at the point it attempts to communicate with the client and handle cleanup then?
- Aside from just unsubscribing the client call back handler, should any further cleanup be performed especially in the case of a fault?
This question poses a similar question but ultimately does not provide answers to the cases outside of the client calling subscribe and/or unsubscribe
Thanks
See Question&Answers more detail:os