У меня есть решение, в котором есть собственная служба WCF. Этот сервис подключается к EF и может нормально читать и писать.
В том же решении я также размещаю конечную точку NServiceBus. Он получает событие из отдельного работающего решения.
Когда я запускаю проект NServiceBus (сам по себе), он, кажется, работает нормально, пока я не попытаюсь выполнить запрос к своей базе данных. Когда я делаю это, я получаю это EntityException:
Основной поставщик не удалось открыть.
Внутренним исключением является TransactionException с сообщением:
Менеджер транзакций партнера отключил поддержку удаленных / сетевых транзакций
В моих проектах NServiceBus и WCF Service используются точно такие же конфигурации и в проектах EF. Я не понимаю, почему один терпит неудачу, а другой нет.
Я немного погуглил и наткнулся на эту страницу: http://msdn.microsoft.com/en-us/library/aa561924%28BTS.20%29.aspx, которая показала мне, как настроить MSDTC, и я сделал это на своем клиентском компьютере. Но это не имело никакого эффекта.
Я также нашел этот вопрос, который говорит, что его нужно задать: NServiceBus: System.Transactions.TransactionException: Менеджер транзакций партнера отключил свою поддержку удаленных / сетевых транзакций . Но это не говорит, почему или где.
Нужно ли устанавливать MSDTC на моем сервере БД? Если так, то почему? Что такое MSDTC?
Почему запуск из размещенного процесса NServiceBus вызывает эту ошибку?
ОБНОВЛЕНИЕ : Я нашел эту ссылку , которая помогла мне понять, что делает DTC. Он также показал мне, как отключить его при необходимости:
using (TransactionScope sc=new TransactionScope(TransactionScopeOption.Suppress))
YourDatabaseHandler.SaveMyStuff(whatever);
Хотя, похоже, это хорошо во многих ситуациях.