You could defer to WCF to handle the pipes? You would benefit from an interrupt driven system using IO Completion Ports to notify your application code when new connections were made into the application.
Taking the pain of implementing WCF would also give you the ability to scale off one machine if you need to take your application over more than one node just by changing the binding from a pipe to a TCP/http binding.
An example implementation of a WCF service is here. It also shows how you could host the same service on pipes or on TCP.