Recentemente tive um problema curioso devido a virtualização de servidores. O pessoal responsável pela infraestrutura utiliza a mesma base/imagem do sistema operacional quando um novo servidor é criado. Até então, sem nenhum problema aparente.
Como a aplicação que estava sendo instalada trata-se de um processo distribuído, com Message Queues, SQL Server e Windows Services, o DTC é necessário para coordenar todos os processos transacionais. Quando a aplicação roda, todas as transações estavam sendo abortadas.
Depois de uma busca aprofundada, encontrei o motivo do problema: há dentro do registro do Windows uma GUID que identifica o DTC. Justamente pelo fato de que todas as máquinas utilizam uma mesma base comum, essa GUID estava igual em todas elas. A solução para o problema, encontrada no final deste artigo, é criar uma nova GUID (via algum utilitário, como aquele do Visual Studio .NET) e renomear a chave que tem como Description MSDTC dentro de HKEY_CLASSES_ROOTCID em cada máquina participante do processo.
Eis aqui maiores informações sobre ghosting, mas não me compete. 😉