2014-11-05 2 views
1

Я получаю следующую ошибку при выполнении моего простого приложения транзакций wcf.Почему моя транзакция WCF не работает?

«По крайней мере, одна операция по контракту„Service1“сконфигурирован с TransactionFlowAttribute атрибут установлен обязательным требованием, но канала связывания„BasicHttpBinding“не настроен с TransactionFlowBindingElement. TransactionFlowAttribute набор атрибутов для обязательного не может быть использована без TransactionFlowBindingElement «.

Мой Фрагмент кода выглядит следующим образом: Iservice1.cs

 [OperationContract] 
     [TransactionFlow(TransactionFlowOption.Mandatory)] 
     bool PerformCreditTransaction(string creditAccountID, double amount); 

     [OperationContract, TransactionFlow(TransactionFlowOption.Mandatory)] 
     bool PerformDebitTransaction(string debitAccountID, double amount); 

Service1.svc.cs

 [OperationBehavior(TransactionScopeRequired = true)] 
     public bool PerformCreditTransaction(string creditAccountID, double amount) 
     { 
      //my code 
     } 

     [OperationBehavior(TransactionScopeRequired = true)] 
     public bool PerformDebitTransaction(string debitAccountID, double amount) 
     { 
      //my code 
     } 

Может ли один помочь мне с этой проблемой?

ответ

2

basicHttpBinding не поддерживает транзакции по границе службы, поскольку basicHttpBinding предоставляет услуги по SOAP 1.1, который не поддерживает WS-AtomicTransaction.

Вам необходимо использовать wsHttpBinding, который использует SOAP 1.2 и поэтому обеспечивает поддержку транзакций.

1

Чтобы установить операцию на TransactionFlowOption.Mandatory, служба и клиент должны использовать привязку к транзакции и включить транзакционный поток для привязки.
Например:

<bindings> 
    <wsHttpBinding> 
    <binding transactionFlow="true" /> 
    </wsHttpBinding> 
</bindings> 

Следующая запись содержит дополнительную информацию:
http://www.codeproject.com/Articles/38793/Steps-to-Enable-Transactions-in-WCF

Примечание: Вы можете предоставить конфигурацию привязки в вопросе, чтобы помочь создать более конкретные ответы.