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.

Заметка. Проблема остается в веб-приложении, потому что, при создании консольного приложения из теста, все работает.

0 ответов

Другие вопросы по тегам