Nastavenie MS DTC kvôli TransactionScope

Publikoval Michal Kočí dňa 24.9.2008 o 21:22 v kategórii .Net

Pokiaľ používate TransactionScope a otvoríte dve spojenia voči jednej databázi v rámci jednej transakcie, naštartuje sa distribuovaná transakcia riadená MS DTC. S distribuovanými transakciami nie je žiaden problém, pokiaľ máte korektne nakonfigurované MS DTC a pokiaľ máte na firewalle otvorené potrebné porty.

Takýto problém sa prejavuje nasledovnými chybovými hláškami:

  • Error HRESULT E_FAIL has been returned from a call to a COM component
  • New transaction cannot enlist in specified transaction coordinator

Postup

V zásade treba spraviť nasledovné, aby ste problém odstránili:

  1. Nakonfigurovať MS DTC (môže sa líšiť systém od systému, hľadajte configure ms dtc v googli...)
  2. Nastaviť konkrétne porty, ktoré majú byť použivané MS DTC, respektíve RPC (vždy port 135 a potom rozpútie ďaľších portov, ktoré su dynamicky pridelované) - Using Distributed COM with Firewalls
  3. Otvoriť porty nastavené v predchádzajúcom kroku na firewalle, viď skript nižšie

Otvorenie rozsahu portov skriptom

Na firewalle otvorte port 135, ktorý slúži na RPC a teda aj pre MS DTC. Okrem neho otvorte aj rozsah portov, ktoré ste nakonfigurovali v registroch aby boli používané RPC. Keďže vo firewalle ktorý je súčasťou systému nejde pridať rozsah portov, otvoriť ich môžete nasledovným skriptom, čísla 6000 a 7000 nahraďte počiatočným a konečným portom, ktoré ste nakonfigurovali na použitie RPC.

@ECHO OFF
ECHO OPENING FIREWALL PORTS
FOR /L %%I IN (6000,1,7000) DO NETSH FIREWALL ADD PORTOPENING TCP %%I "RPC - Data (TCP, %%I)"
ECHO FINISHED
PAUSE

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.