Pure OO is all very nice but OO does not cater for real-world scenarios such as distribution, 'scalling-up' or 'scalling-out' of enterprise systems.
Some particular instances of OO cater for this, I would say that these instances are proprietary and are 'fudges' to get round what OO inherently doesn't have.
OO is a theory that everyone must except cannot always fit neatly into a real-world solutions.
How to take model modern-day distributed architecture applications is a mixture of experience and good judgement
because there is no silver-bullet.
Once OO is excepted as not being the complete answer we can look at ways to fill the gaps. Obviously Microsoft is full aware they can not solve this issue in isolation, it's simply not practical. So for the time being the language will have to take on some
of the burden. At this point it is very important to state that a balance between good design and practical implementation must be struck.
There is no point in being a 'purest' and believing OO is the total answer, this, I believe, is either 'denial' or 'ignorance', sorry to be so strong with my opinion but I have been on plenty of projects were developers have failed to see the woods for the
trees. There is only so far that you can say that the world is wrong and you are right.
So what is the answer? ... balance and the journey to get there.