Не так давно мне нужно было разделить сервер веб приложения и SQL сервер(завелась отдельная машинка, на которую SQL сервер и перенесли), но сразу все завести не удалось.
Для группировки команд в транзакции в коде используется TransactionScope. Однако, когда клиентское приложение(в моем случае ASP.NET) и MS SQL сервер находятся на разных компьютерах, использование TransactionScope приводит к следующей ошибке.
The transaction manager has disabled its support for remote/network transactions.
Локально все настроил. Но поскольку, процедуру придется повторять при развертывании на живом сервере, а так же при переездах, то я решил написать небольшую инструкцию для себя. Когда закончил, подумал что может еще кому-нибудь пригодится.
Сразу скажу у меня работает следующая связка
Vista — клиентский PC
Windows Server 2008 + SQL Server 2008 — сервер.
Если у вас другие комбинации, то некоторые экраны на скриншотах у вас будут выглядеть иначе.
Итак, для того что бы все заработало необходимо настроить Distributed Transaction Coordinator на компьютере с MS SQL Server, и на клиентском компьютере.
Настройка сервера
1. Убедиться что Distributed Transaction Coordinator сервис запущен.
2. Настроить Distributed Transaction Coordinator (DTC)
Для этого
После этого сервис перезапустится.
3. Необходимо добавить исключение в Windows Firewall для Distributed Transaction Coordinator
4. После этого перезапустить сервис SQL Server.
На всякий случая лучше вообще сервер перезагрузить, хотя мне хватило перезагрузки SQL Server’a.
Настройка клиента
1. Так же необходимо убедится что запущен DTC сервис.
2. Выполняем ‘dcomcnfg’, заходим в те же свойства что и на сервере и ставим галочки
3. Добавляем исключения в Windows Firewall
После этих шагов все заработало.
Более подробно про назначение всех опций можно почитать здесь.
Спасибо за внимание.
Для группировки команд в транзакции в коде используется TransactionScope. Однако, когда клиентское приложение(в моем случае ASP.NET) и MS SQL сервер находятся на разных компьютерах, использование TransactionScope приводит к следующей ошибке.
The transaction manager has disabled its support for remote/network transactions.
Локально все настроил. Но поскольку, процедуру придется повторять при развертывании на живом сервере, а так же при переездах, то я решил написать небольшую инструкцию для себя. Когда закончил, подумал что может еще кому-нибудь пригодится.
Сразу скажу у меня работает следующая связка
Vista — клиентский PC
Windows Server 2008 + SQL Server 2008 — сервер.
Если у вас другие комбинации, то некоторые экраны на скриншотах у вас будут выглядеть иначе.
Итак, для того что бы все заработало необходимо настроить Distributed Transaction Coordinator на компьютере с MS SQL Server, и на клиентском компьютере.
Настройка сервера
1. Убедиться что Distributed Transaction Coordinator сервис запущен.
2. Настроить Distributed Transaction Coordinator (DTC)
Для этого
- Выполняем комманду ‘dcomcnfg’
- Далее Computers->My Computer-> Distributed Transaction Coordinator
- На LocalDTC кликаем правой кнопкой и выбираем Properties
- Переходим на вкладку Security на ней ставим галочки на Network DTC Access, Allow Remote Clients, Allow Inbound, Allow Outbound.
После этого сервис перезапустится.
3. Необходимо добавить исключение в Windows Firewall для Distributed Transaction Coordinator
4. После этого перезапустить сервис SQL Server.
На всякий случая лучше вообще сервер перезагрузить, хотя мне хватило перезагрузки SQL Server’a.
Настройка клиента
1. Так же необходимо убедится что запущен DTC сервис.
2. Выполняем ‘dcomcnfg’, заходим в те же свойства что и на сервере и ставим галочки
- Network DTC Access
- Allow Inbound
- Allow Outbound
3. Добавляем исключения в Windows Firewall
После этих шагов все заработало.
Более подробно про назначение всех опций можно почитать здесь.
Спасибо за внимание.