Pergunta

Esta é mesmo uma pergunta válida?Eu tenho um aplicativo .NET para Windows que usa MSTDC e está gerando uma exceção:

System.Transactions.TransactionManagerCommunicationException:O acesso à rede para o Distributed Transaction Manager (MSDTC) foi desabilitado.Ative o DTC para acesso à rede na configuração de segurança do MSDTC usando a ferramenta administrativa de serviços de componentes ---> System.runtime.interOpservices.comexception (0x8004d024):O Transaction Manager desativou seu suporte para transações remotas/de rede.(Exceção de HRESULT:0x8004D024) at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim)....

eu segui o guia Kbalertz para habilitar o MSDTC no PC em que o aplicativo está instalado, mas o erro ainda ocorre.

Eu queria saber se isso era um problema de banco de dados?Se sim, como posso resolver isso?

Nenhuma solução correta

Outras dicas

Use isto para Windows Server 2008 r2 e Windows Server 2012 R2

  1. Clique Começar, clique Correr, tipo dcomcnfg e depois clique OK abrir Serviços de componentes.

  2. Na árvore do console, clique para expandir Serviços de componentes, Clique para expandir Computadores, Clique para expandir Meu computador, Clique para expandir Coordenador de Transações Distribuídas e depois clique DTC local.

  3. Clique com o botão direito DTC local e clique Propriedades para exibir o Propriedades locais do DTC caixa de diálogo.

  4. Clique no Segurança aba.

  5. Marca de verificação "Acesso à rede DTC" caixa de seleção.

  6. Finalmente marca de seleção "Permitir entrada" e "Permitir saída" caixas de seleção.

  7. Clique Aplicar, OK.

  8. Uma mensagem aparecerá sobre reiniciando o serviço.

  9. Clique OK e isso é tudo.

Referência: https://msdn.microsoft.com/en-us/library/dd327979.aspx

Observação: Às vezes, o firewall da rede no computador local ou no servidor pode interromper sua conexão, portanto, crie regras para "Permitir entrada" e "Permitir saída" conexão para C:\Windows\System32\msdtc.exe

Você ainda precisa do MSDTC?O escalonamento que você está enfrentando geralmente é causado pela criação de diversas conexões em um único TransactionScope.

Se precisar dele, você precisará habilitá-lo conforme descrito na mensagem de erro.No XP:

  • Vá para Ferramentas Administrativas -> Serviços de Componentes
  • Expanda Serviços de Componentes -> Computadores ->
  • Clique com o botão direito -> Propriedades -> guia MSDTC
  • Clique no botão Configuração de segurança

Descobri que a melhor maneira de depurar é usar a ferramenta da Microsoft chamada DTCP

  1. Copie o arquivo para o servidor (BD) e para o cliente (servidor de aplicação/pc cliente)
    • Inicie no servidor e no cliente
    • No servidor:preencha o nome do computador netbios cliente e tente configurar uma conexão DTC
    • Reinicie os dois aplicativos.
    • No cliente:preencha o nome do computador netbios do servidor e tente configurar uma conexão DTC

Tive alguns problemas com tarifas em nossa antiga rede corporativa e tenho algumas dicas:

  • se você receber a mensagem de erro "Falha no Gethostbyname", significa que o computador não consegue encontrar o outro computador pelo seu nome netbios.O servidor poderia, por exemplo, resolver e executar ping no cliente, mas isso funciona no nível DNS.Não no nível de pesquisa do netbios.Usar servidores WINS ou alterar o LMHOST (sujo) resolverá esse problema.
  • se você receber um erro "Acesso negado", as configurações de segurança não correspondem.Você deve comparar a guia de segurança do msdtc e fazer com que o servidor e o cliente correspondam.Uma outra coisa a observar é o RestringirRemoteClients valor.Dependendo da versão do seu sistema operacional e, mais importante, do Service Pack, esse valor pode ser diferente.
  • Outros problemas de conexão:
    • O firewall entre o servidor e o cliente deve permitir a comunicação pela porta 135.E o mais importante é que a conexão pode ser iniciada em ambos os sites (tive muitos problemas com o pessoal do firewall da minha empresa porque eles presumiram que apenas o servidor abriria uma conexão para aquela porta)
    • O protocolo retorna uma porta aleatória para conexão para a comunicação da transação real.O pessoal do firewall não gosta disso, gosta de restringir as portas a um determinado intervalo.Você pode restringir a geração de porta dinâmica RPC a um determinado intervalo usando as chaves conforme descrito em Como configurar a alocação dinâmica de portas RPC para funcionar com firewalls.

Na minha experiência, se o DTCPing for capaz de configurar uma conexão DTC iniciada no cliente e iniciada no servidor, suas transações não serão mais o problema.

Também pode ver aqui sobre como ativar o MSDTC no services.msc do Painel de Controle.

No servidor onde o gatilho reside, você precisa ativar o serviço MSDTC.Você pode fazer isso clicando em INICIAR > CONFIGURAÇÕES > PAINEL DE CONTROLE > FERRAMENTAS ADMINISTRATIVAS > SERVIÇOS.Encontre o serviço chamado 'Coordenador de Transação Distribuído' e clique com o botão direito do mouse (nele e selecione)> Iniciar.

O MSDTC deve estar habilitado em ambos os sistemas, servidor e cliente.
Além disso, certifique-se de que não haja um firewall entre os sistemas que bloqueie o RPC.
Teste DTC é um ótimo aplicativo que ajuda você a solucionar quaisquer outros problemas.

@Dan,

Não preciso que o MSDTC habilitado para que as transações funcionem?

Somente transações distribuídas – Aquelas que envolvem mais de uma conexão.Certifique-se duplamente de abrir apenas uma única conexão dentro da transação e ela não aumentará - o desempenho também será muito melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top