A practical guide for .NET developers to build efficient communication mechanism for distributed apps