2012-03-19 2 views
0

Я хочу создать службу WCF с помощью NetMsmqBinding, которая будет вставлять данные в базу данных Oracle. Я использую MS Visual Studio с C# и .NET 4.0, в настоящее время использую System.Data.OracleClient, с Oracle 11.WCF MSMQ Транзакция с Oracle Database Insert

Мое требование состоит в том, чтобы никакие данные не терялись, если бы клиент был в состоянии позвонить услуга успешно (тем самым помещая сообщение в очередь MSMQ).

Поэтому я пытаюсь разработать службу таким образом, чтобы, если вставка в Oracle была успешной, сообщение удаляется из очереди. Если нет, то сообщение не следует снимать с очереди, чтобы его можно было повторить в течение определенного периода времени. Я пытаюсь использовать транзакцию (используя класс TransactionScope), чтобы убедиться, что это работает таким образом.

Однако я выполняю инструкцию INSERT в Oracle в TransactionScope, она генерирует исключение и, похоже, приводит к сбою рабочего процесса IIS. Похоже, что транзакции WCF/.NET не поддерживаются Oracle? Я не смог найти четкий ответ в любом месте, чтобы показать, поддерживает ли Oracle транзакции в рамках .NET. Можно ли это сделать, или я не на правильном пути? Любой совет будет принят во внимание.

ответ

0

Если вы хотите поддерживать распределенные транзакции с ODP.net на Oracle, у вас должно быть Служба восстановления Oracle MTS, работающая на клиентской машине. Это входит в установочный пакет ODAC.

+0

У меня есть служба восстановления Oracle MTS. Однако из вашего комментария, упоминающего ODP.net, означает ли это, что System.Data.OracleClient не будет работать с транзакциями и что ODP.net должен использоваться вместо этого? Я спрашиваю перед попыткой, потому что мы уже используем System.Data.OracleClient и переключение * может * быть большой задачей для нас. –

+0

Кроме того, я хотел бы добавить, что я только отправляю запрос в одну базу данных из службы wcf, поэтому я не уверен, что это будет квалифицироваться как распределенная транзакция? –

+0

У меня нет опыта использования microsoft OracleClient, поэтому, к сожалению, я не могу вам помочь. Однако у меня были распределенные транзакции, работающие через ODP с помощью TransactionScope. Одна из проблем для меня заключалась в установке службы восстановления MTS. FYI, если транзакция передается по нескольким машинам, тогда по определению она распространяется. –