In this chapter, you have seen how to use a callback contract to define operations that a client application can expose to a service. Implementing a callback contract requires the client application and service to connect with each other over a bidirectional channel that supports duplex communications; this means using the NetTcpBinding binding, the NetNamedPipeBinding binding, the WSDualHttpBinding binding, or a custom binding based on the TCP or named pipe transports, or the HTTP transport with the <CompositeDuplex> binding element.
You can use a callback contract to help implement a publish and subscribe system, enabling a service to register instances of client applications that wish to be notified if a particular event occurs and then using an operation in the callback contract to inform the client application instances when the event actually happens.