The more I think about the WCF services hosted using internal endpoints inside a worker role, it seems to me that the clients of these services are at a particular disadvantage compared to the clients of public WCF services behind NLB. Since these clients pick an instance at random (or use some sort of software load balancing algorithm) and then connect to them directly, they have to be particularly mindful about calling GetRandomEndpoint() method (and possibly implement retry logic) for every single call to account for fault and upgrade domains that each of those worker role instances belong to. Since the clients in this example are Web Roles with high availability (if more than 2 instances), not remembering to call GetRandomEndpoint() prior to service call may indirectly affect the availability of the app as a whole.

 

What are your thougths or I am missing something here?