There seems to be a lot of enmity against DCOM, and I'm curious to understand why. For a company still writing to the Win32 SKD using C++, is there any real reason not to use DCOM in current or future development? Is some future version of Windows not going to support it? Is it too fragile and fails to work often? Is it too complicated to implement compared to other technologies? What's the deal?
Well, DCOM is a distributed version of COM and COM is very complex by itself and it's very easy to do something wrong unintentionally (see this recent question and the answer to it for examples). With DCOM you just have even more ways to hurt yourself.
Other than that it works and is for example a good way for hosting in-proc COM components in a separated process.
I implemented a large system using DCOM in the late 90's. Although it worked pretty well, there were a couple of issues. For starters it uses unpredictable port numbers for communication. It is not scalable, and you are much better off using WCF than DCOM.
If your trying to build a client server application and want the communication to go across network boundaries (for example the internet) then DCOM can be problematic due to firewalls.
I had worked on a very success server application which was distributed using DCOM, we let the system handle most of the complexity by creating COM+ Server Applications and exporting Application Proxies. In this case it worked very well as long as all of our versions were synched up.
I think momentum has shifted to SOAP and other web service technology because it is:
- easier to deploy systems in the presence of firewalls
- no vendor lock-in
I've never used DCOM myself, so I can't really comment on its general quality or fitness.
I dislike COM/DCOM because "Catastrophic failure"
is the most unhelpful error message in the history of error messages.
- Security model. Especially when computers are not in the same domain (or aren't in domain at all).
- Auto interfaces modeled for Visual Basic (original, not .NET), obsolete and not pretty to use from other languages.
If you only want to develop in C++ and deploy in controlled network, it may still be a good choice.