C# - Oracle高级队列:在回收池应用程序

时间:2017-12-01 15:32:17

标签: c# oracle oracle-aq oracle-manageddataaccess

我使用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时,oracle队列中没有任何反应。当iis池应用程序被回收或超时时插入行。

在本地我有IIS 10,而在生产中我在Windows Server 2008 R2上有一个IIS 6.1

我使用.Net Framework 4.5,应用程序编译为x64。 EntityFramework使用Oracle ManagedDataAccess,如您所见,AOQ使用Oracle DataAccess Client。

请注意。问题留在Web应用程序中,创建测试的控制台应用程序,一切正常。

0 个答案:

没有答案