Вызов WCF с netMsmqBinding внутри транзакции остановки TransactionScope - PullRequest
1 голос
/ 06 октября 2009

У меня есть служба журналов WCF, которая работает через MSMQ. Элементы записываются в базу данных Sql Server 2005. Каждый функционирует правильно, если используется вне TransactionScope. При использовании внутри экземпляра TransactionScope вызов всегда прерывает транзакцию. Сообщение = "Транзакция прервана".

Что мне нужно сделать, чтобы этот вызов работал внутри транзакции? Это вообще возможно. Я читал, что для того, чтобы транзакция клиента проходила через границу службы, привязка должна поддерживать поток транзакций, который немедленно ограничивает привязки только для NetNamedPipeBinding, NetTcpBinding, WSHttpBinding, WSDualHttpBinding и WSFederationHttpBinding.

Ответы [ 2 ]

4 голосов
/ 06 октября 2009

Я не очень хорошо разбираюсь в MSMQ, но есть действительно хорошая серия постов в блоге Тома Холландера о MSMQ, IIS и WCF: научить их красиво играть - в части 3, которая является ссылкой Том говорит о транзакции.

MSMQ может быть транзакционным или нет. А в WCF можно оформить как контракт на обслуживание, так и отдельные контракты (методы) операций с атрибутами, связанными с транзакцией, такими как разрешение, запрет или требование контекста транзакции.

Насколько я понимаю, в вашей настройке вы не хотите, чтобы часть MSMQ была транзакционной, но вы должны иметь возможность использовать ее, даже если присутствует окружающая транзакция. В этом случае вам необходимо добавить TransactionFlow = "ALlowed" к вашему операционному контракту следующим образом:

[ServiceContract]
public interface ILoggingService
{
  [OperationContract]
  [TransactionFlow(TransactionFlowOption.Allowed)]
  void LogData(......);
}

Это должно сделать это!

Марк

2 голосов
/ 06 октября 2009

Извините за ненужный вопрос ...

Я решил свою проблему. Мне нужно было разместить

[TransactionFlow(TransactionFlowOption.Allowed)]

на операции в договоре на обслуживание, а затем

[OperationBehavior(TransactionScopeRequired=true)] 

о выполнении договора (сама услуга).

Работает угощение.

...