Oracle高级队列 - OracleClient中的AccessViolationException

时间:2013-10-30 09:36:59

标签: c# oracle11g access-violation odp.net

我在.NET 4.5 Windows服务中使用Oracle Advanced Queuing。该服务应从Oracle Queue(11gR2)读取并处理事务中的消息。 这适用于队列中的第一条消息,但在处理第二条消息时,会在Oracle客户端内部深深抛出System.AccessViolationException。

该服务循环执行以下操作:

  1. 开始新的交易(使用TransactionScope)
  2. 创建新的OracleConnection
  3. 使用此连接创建新的OracleAQQueue
  4. 将OracleAQQueue的DequeueOptions.Wait属性设置为3
  5. 打开OracleConnection
  6. 在OracleAQQueue上调用Dequeue()
  7. 使用自定义业务逻辑处理邮件
  8. 从1)
  9. 完成(提交)交易
  10. 配置OracleAQQueue和OracleConnection
  11. 队列中的第一条消息将被处理,但在下一个循环中,我得到以下StrackTrace并终止Windows服务:

    System.AccessViolationException
    Stack:
       at Oracle.DataAccess.Client.OpsAQ.FreeCachedDesc(IntPtr ByRef, IntPtr ByRef, IntPtr ByRef)
       at Oracle.DataAccess.Client.OpsAQ.FreeCachedDesc(IntPtr ByRef, IntPtr ByRef, IntPtr ByRef)
       at Oracle.DataAccess.Client.OracleAQQueue.Dispose(Boolean)
       at StarTrack.Common.Messaging.AQ.InternalOracleQueue.Dispose()
       ....
    

    我正在使用Oracle Client 11.2.0.3.0(64位)。

    更新:也试过12.1.0.1.0(64位)客户端,同样的问题。

    有没有人做过类似问题的Oracle Advanced Queuing并且解决了它?

    祝你好运, 马库斯

0 个答案:

没有答案