Я начинаю использовать MassTransit и должен использовать RuntimeServices для управления подписками и тайм-аутами. Окружающая среда, в которую я устанавливаю, представляет собой внешнюю сеть, разделенную на сегменты с использованием брандмауэров.Можно ли отключить службы трассировки MassTransit от DTC?
В настоящее время сервер приложений, на котором установлены RuntimeServices, и SQL Server не имеют открытых портов RPC, что позволило бы корректно работать с координатором распределенных транзакций (DTC).
Полное исключение, которое я получаю, приведено ниже, но важная часть выглядит так: System.Transactions.TransactionException: The operation is not valid for the state of the transaction.
. Я не считаю, что транзакция выходит из-под земли, так как DTC не настроен.
Хотя я должен иметь возможность запрашивать правильные порты, которые будут открыты, я неохотно делаю это, так как я не беспокоюсь о транзакциях для этой цели. Поэтому в идеале я хотел бы сказать MassTransit или, возможно, это nHibernate, что я не требую распределенных транзакций.
BTW моя очередь сообщений MS не является транзакционной.
Любая помощь приветствуется с благодарностью, Роб
Полный стек исключений трассировки:
MassTransit.Context.ServiceBusReceiveContext-'System.Action'1[[MassTransit.IConsumeContext, MassTransit, Version=2.6.416.0, Culture=neutral, PublicKeyToken=null]]' threw an exception consuming message 'MassTransit.Context.ReceiveContext' NHibernate.Exceptions.GenericADOException: could not execute query [ select subscripti0_.CorrelationId as Correlat1_1_, subscripti0_.CurrentState as CurrentS2_1_, subscripti0_.ControlUri as ControlUri1_, subscripti0_.DataUri as DataUri1_ from dbo.SubscriptionClientSaga subscripti0_ where subscripti0_.CurrentState=? ] Name:p1 - Value:Active (State) [SQL: select subscripti0_.CorrelationId as Correlat1_1_, subscripti0_.CurrentState as CurrentS2_1_, subscripti0_.ControlUri as ControlUri1_, subscripti0_.DataUri as DataUri1_ from dbo.SubscriptionClientSaga subscripti0_ where subscripti0_.CurrentState=?] ---> System.Transactions.TransactionException: The operation is not valid for the state of the transaction. at System.Transactions.TransactionState.EnlistVolatile(InternalTransaction tx, IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions, Transaction atomicTransaction) at System.Transactions.Transaction.EnlistVolatile(IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions) at NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.EnlistInDis tributedTransactionIfNeeded(ISessionImplementor session) at NHibernate.Impl.AbstractSessionImpl.EnlistInAmbientTransactionIfNeeded() at NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus() at NHibernate.Impl.SessionImpl.get_Batcher() at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session) at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) --- End of inner exception stack trace --- at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) ... (elided for brevity!) ...
Спасибо ET1975 - получается, что ваша первая ссылка указала мне на что-то, что я должен был запомнить - добавлен Enlist = false до конца строки подключения, чтобы гарантировать, что запросы SQL не участвовали в транзакции DTC. – WooWaaBob