Вам необходимо включить сетевой доступ по DTC, как описано в этой статье Microsoft TechNet . Это изменение может потребоваться как на базе данных, так и на серверах приложений. Часто DTC уже включен на сервере базы данных, поэтому я сначала посмотрю на сервер приложений.
Вот снимок экрана того, что мы используем, за исключением опции «Разрешить удаленное администрирование»:
Я не сталкивался с проблемой HRESULT E_Fail, которая у вас сейчас есть, но в этой статье о XP SP2 и транзакциях было следующее интересное предложение:
Еще один параметр конфигурации, который вы
нужно знать (хотя я считаю,
это редкий сценарий)
Раздел реестра RestrictRemoteClients. Если
значение этого ключа установлено в 2
(RPC_RESTRICT_REMOTE_CLIENT_HIGH) затем
MSDTC сетевых транзакций не будет
умеет нормально работать. MSDTC поддерживает
только RPC_RESTRICT_REMOTE_CLIENT_NONE
(0) и
RPC_RESTRICT_REMOTE_CLIENT_DEFAULT (1)
ценности. Увидеть
http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx#XSLTsection128121120120
для получения дополнительной информации о
RestrictRemoteClients.
Наконец, хотя это и не относится к вашей проблеме, очень важно отметить, что при использовании класса TransactionScope
его настройкой по умолчанию является использование уровня изоляции транзакции Serializable . Сериализуемый является наиболее ограничивающим из уровней изоляции, и, откровенно говоря, удивительно, что он был выбран по умолчанию. Если вам не нужен этот уровень блокировки, я настоятельно рекомендую установить для уровня изоляции менее ограничительный параметр (ReadCommitted) при создании экземпляра TransactionScope
:
var scopeOptions = new TransactionOptions();
scopeOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
scopeOptions.Timeout = TimeSpan.MaxValue;
using (var scope = new TransactionScope(TransactionScopeOption.Required,
scopeOptions))
{
// your code here
}