Здравствуйте. Я пытаюсь использовать глобальную транзакцию, для службы и клиента (мне надо ,чтобы данные записывались в базу, на клиенте и на сервере и если произойдёт где - то ошибка, то данные откатывались).
Я использую TransactionScope, но при этом получаю ошибку:
Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network access in the security configuration for MSDTC using the Component Services Administrative tool
Как решить эту проблему, я знаю (надо включить DTC), но проблема в том, что эту штуку надо включать на каждом компе клиента, а это не хорошо, ибо компов много.
Вопрос такой:
Есть какие-то другие способы, чтобы использовать глобальную транзакцию (т.е. на службе и на клиенте) или может какие-то настройки конфига и чтоб не ставить никаких дополнительных галочек на клиентах?
Ниже пример службы.
Web.config
<system.serviceModel>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="behaviorStandart">
<endpoint contract="WcfService1.IService1" address="" bindingConfiguration="bindingWsHttp" binding="wsHttpBinding" ></endpoint>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="bindingWsHttp" closeTimeout="00:10:00" openTimeout="00:10:00" maxBufferPoolSize="2147483647"
receiveTimeout="00:10:00" sendTimeout="00:10:00" maxReceivedMessageSize="2147483647" transactionFlow="true">
<readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
<reliableSession inactivityTimeout="10:00:30" ordered="true" enabled="true" />
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="behaviorStandart">
<dataContractSerializer maxItemsInObjectGraph="65536"/>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug httpHelpPageEnabled="false" includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Contract
[ServiceContract]
public interface IService1
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
void AddData(String name);
}
Service.svc
[OperationBehavior(TransactionScopeRequired = true)]
public void AddData(String name)
{
//code
}