Hoje pela manhã estava fazendo um teste em um processo transacionado que estamos criando na empresa onde trabalho. Entre algumas tarefas, temos a leitura de informações (mensagens) que estão contidas dentro do Message Queue e, depois de analisado o conteúdo da mesma, o seu conteúdo é salvo em uma base de dados SQL Server 2005 (fisicamente separado), qual encontra-se hospedado em um Windows Server 2003 R2.
Ao efetuar o primeiro teste, pude notar que uma exceção aconteceu informando que o acesso remoto ao DTC estava desabilitado. Para resolver isso, não tem muito segredo. Basta ir até o Component Services, clicar com o botão direito do mouse em cima do ícone Computer e ir até as propriedades do mesmo. Depois disso, há uma aba chamada MS DTC que, no fim dela, há um botão denominado Security Configuration. Ao clicar, uma nova tela é aberta e voce precisa habilitar a opção Network DTC Access. O mesmo deve ser feito do lado de servidor se não estiver habilitado. Somente atentem-se que ao fazer qualquer alteração, o serviço do DTC sofre um stop-and-go, parando também o serviço do Message Queue que, obrigatoriamente, voce deverá inicializar.
Depois disso resolvido, ao executar novamente o processo, recebo a seguinte exceção: Unhandled Exception: System.Transactions.TransactionException: The transaction has already been implicitly or explicitly committed or aborted. —> System.Runtime.InteropServices.COMException (0x8004D00E): The transaction has already been implicitly or explicitly committed or aborted (Exception from HRESULT: 0x8004D00E).
O servidor não continha nenhum problema. O DTC do mesmo estava iniciado, não tinha problemas para acessá-lo via IP ou via nome; em resumo, decidi que o problema não estava no servidor. Depois de alguma pesquisa pela internet, encontrei alguns casos onde o pessoal estava dizendo que os envolvidos deveriam estar dentro do mesmo domínio mas, no meu caso, ambos (cliente e servidor) não tinham nenhum domínio definido.
Como o sistema operacional do meu notebook é WinXP Pro com SP2, passei a duvidar que havia alguma restrição de segurança no meu notebook. E não deu outra, foi adicionar o executável %windir%system32msdtc.exe na lista de exceção do Firewall do Windows XP que resultou com sucesso.