Domanda

È anche questa una domanda valida?Ho un'app Windows .NET che utilizza MSTDC e genera un'eccezione:

System.Transactions.TransactionManagerCommunicationException:L'accesso alla rete per Distributed Transaction Manager (MSDTC) è stato disabilitato.Abilita DTC per l'accesso alla rete nella configurazione di sicurezza per MSDTC utilizzando lo strumento amministrativo dei servizi componenti ---> System.runtime.Interopservices.comexception (0x8004d024)Il gestore delle transazioni ha disabilitato il proprio supporto per le transazioni remote/di rete.(Eccezione da HRESULT:0x8004d024) su system.transactions.oletx.idtcproxyshimfactory.receiveTransaction (Uint32 PropgationToKensize, byte [] PropgationToken, Intptr ManagedIdentifier, Guid & TransactionIdentifier, OletxTransationSolationLevel e Isolationlevel, iTransActShim) ....

Ho seguito la guida Kbalertz per abilitare MSDTC sul PC su cui è installata l'app, ma l'errore si verifica ancora.

Mi chiedevo se fosse un problema del database?Se sì, come posso risolverlo?

Nessuna soluzione corretta

Altri suggerimenti

Utilizzare questo per Windows Server 2008 r2 e Windows Server 2012 R2

  1. Clic Inizio, fare clic Correre, tipo dcomcnfg e quindi fare clic OK aprire Servizi componenti.

  2. Nell'albero della console, fare clic per espandere Servizi componenti, fare clic per espandere Computer, fare clic per espandere Il mio computer, fare clic per espandere Coordinatore delle transazioni distribuite e quindi fare clic DTC locale.

  3. Fare clic con il tasto destro DTC locale e fare clic Proprietà per visualizzare il Proprietà DTC locali la finestra di dialogo.

  4. Clicca il Sicurezza scheda.

  5. Segno di spunta "Accesso DTC alla rete" casella di controllo.

  6. Infine il segno di spunta "Consenti entrata" E "Consenti in uscita" caselle di controllo.

  7. Clic Fare domanda a, OK.

  8. Verrà visualizzato un messaggio relativo a riavvio il servizio.

  9. Clic OK e questo è tutto.

Riferimento : https://msdn.microsoft.com/en-us/library/dd327979.aspx

Nota: A volte il firewall di rete sul computer locale o sul server potrebbe interrompere la connessione, quindi assicurati di creare regole per farlo "Consenti entrata" E "Consenti in uscita" connessione per C:\Windows\System32\msdtc.exe

Hai bisogno di MSDTC?L'escalation che stai riscontrando è spesso causata dalla creazione di più connessioni all'interno di un singolo TransactionScope.

Se ne hai bisogno, devi abilitarlo come indicato nel messaggio di errore.Su XP:

  • Vai a Strumenti di amministrazione -> Servizi componenti
  • Espandi Servizi componenti -> Computer ->
  • Fare clic con il tasto destro -> Proprietà -> scheda MSDTC
  • Premi il pulsante Configurazione sicurezza

Ho scoperto che il modo migliore per eseguire il debug è utilizzare lo strumento Microsoft chiamato DTCCPing

  1. Copiare il file sia sul server (DB) che sul client (server dell'applicazione/pc client)
    • Avviarlo dal server e dal client
    • Al server:inserisci il nome del computer netbios del client e prova a impostare una connessione DTC
    • Riavvia entrambe le applicazioni.
    • Al cliente:inserisci il nome del computer netbios del server e prova a impostare una connessione DTC

Ho avuto molti problemi nella nostra vecchia rete aziendale e ho alcuni suggerimenti:

  • se ricevi il messaggio di errore "Gethostbyname fallito" significa che il computer non riesce a trovare l'altro computer nome netbios.Il server potrebbe ad esempio risolvere ed eseguire il ping del client, ma funziona a livello DNS.Non a livello di ricerca netbios.Utilizzando i server WINS o modificando LMHOST (dirty) si risolverà questo problema.
  • se ricevi l'errore "Accesso negato", le impostazioni di sicurezza non corrispondono.Dovresti confrontare la scheda di sicurezza per msdtc e far corrispondere il server e il client.Un'altra cosa da guardare è il Limita i client remoti valore.A seconda della versione del sistema operativo e, soprattutto, del Service Pack, questo valore può essere diverso.
  • Altri problemi di connessione:
    • Il firewall tra il server e il client deve consentire la comunicazione sulla porta 135.E, cosa ancora più importante, la connessione può essere avviata da entrambi i siti (ho avuto molti problemi con gli addetti al firewall nella mia azienda perché presumevano che solo il server avrebbe aperto una connessione su quella porta)
    • Il protocollo restituisce una porta casuale a cui connettersi per la comunicazione della transazione reale.Agli addetti ai firewall questo non piace, preferiscono limitare le porte entro un certo intervallo.È possibile limitare la generazione della porta dinamica RPC a un determinato intervallo utilizzando le chiavi come descritto in Come configurare l'allocazione dinamica delle porte RPC per funzionare con i firewall.

Nella mia esperienza, se DTCPing è in grado di impostare una connessione DTC avviata dal client e avviata dal server, le tue transazioni non rappresentano più un problema.

Può anche vedere Qui su come attivare MSDTC dal services.msc del Pannello di controllo.

Sul server in cui risiede il trigger, è necessario attivare il servizio MSDTC.Puoi farlo facendo clic su START > IMPOSTAZIONI > PANNELLO DI CONTROLLO > STRUMENTI DI AMMINISTRAZIONE > SERVIZI.Trova il servizio chiamato "Coordinatore della transazione distribuita" e clic destro (su di esso e seleziona)> Avvia.

MSDTC deve essere abilitato su entrambi i sistemi, sia server che client.
Inoltre, assicurati che non ci sia un firewall tra i sistemi che blocchi RPC.
DTCTest è una piccola app carina che ti aiuta a risolvere qualsiasi altro problema.

@Dan,

Non ho bisogno di MSDTC abilitato affinché le transazioni funzionino?

Solo transazioni distribuite: quelle che coinvolgono più di una singola connessione.Assicurati doppiamente di aprire una sola connessione all'interno della transazione e che non si intensifichi: anche le prestazioni saranno molto migliori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top