C# - Oracle Advanced Queue: строки не помещаются в очередь до тех пор, пока приложение пула переработки не будет
Я использую TransactionScope для выполнения некоторых операций как с Entity Framework, так и с Oracle Advanced Queue. В локальной машине у меня нет проблем, некоторые из моих коллег делают. Проблемы случаются в производстве машины. Проблема в том, что когда я помещаю сообщение в очередь, оно, кажется, не вставляется в очередь таблицы. После истечения времени ожидания пула приложений IIS или выполнения ручной перезапуска строки появятся в таблице.
using (var ctx = new EFContext())
{
using (var ts = new TransactionScope())
{
// Perform some EF operations
ctx.SaveChanges();
MyEnqueuer enq = new Enqueuer();
enq.Enqueue();
ts.Complete();
}
}
Метод класса MyEnqueuer:
using (var _cn = new Oracle.DataAccess.Client.OracleConnection(_cs))
{
using (OracleAQQueue _queueObj = new OracleAQQueue(_queueCs, _cn))
{
_cn.Open();
_queueObj.MessageType = OracleAQMessageType.Raw;
OracleAQMessage _msg = new OracleAQMessage();
_msg.Payload = _evento.ToByteArray();
_queueObj.EnqueueOptions.Visibility = OracleAQVisibilityMode.OnCommit;
_queueObj.Enqueue(_msg);
_cn.Close();
}
}
Как я уже сказал, когда выполняется ts.Complete, в очереди оракула ничего не происходит. Строка вставляется, когда приложение пула iis перерабатывается или истекло время ожидания.
Локально у меня есть IIS 10, вместо этого в производстве у меня есть IIS 6.1 на Windows Server 2008 R2
Я использую.Net Framework 4.5 и приложение скомпилировано x64. EntityFramework использует Oracle ManagedDataAccess, и, как вы можете видеть, AOQ использует Oracle DataAccess Client.
Заметка. Проблема остается в веб-приложении, потому что, при создании консольного приложения из теста, все работает.