【问题标题】:WCF MSMQ Transaction with Oracle Database Insert带有 Oracle 数据库插入的 WCF MSMQ 事务
【发布时间】:2012-03-19 15:35:15
【问题描述】:

我想使用 NetMsmqBinding 创建一个 WCF 服务,它将数据插入 Oracle 数据库。我正在使用带有 C# 和 .NET 4.0 的 MS Visual Studio,目前使用带有 Oracle 11 的 System.Data.OracleClient。

我的要求是永远不会丢失任何数据,前提是客户端能够成功调用服务(从而将消息放入 MSMQ 队列)。

因此,我正在尝试设计服务,以便如果插入到 Oracle 中成功,则将消息从队列中取出。如果不是,则不应将消息从队列中取出,以便在一段时间内重试。我正在尝试使用事务(使用 TransactionScope 类)来确保它以这种方式工作。

但是,我在 TransactionScope 中将 INSERT 语句执行到 Oracle 中时,它会引发异常并且似乎会使 IIS 工作进程崩溃。 Oracle 似乎不支持 WCF/.NET 事务?我无法在任何地方找到明确的答案来说明 Oracle 是否支持 .NET 框架内的事务。这是可能的,还是我不在正确的轨道上?任何建议将不胜感激。

【问题讨论】:

    标签: wcf oracle transactions msmq


    【解决方案1】:

    如果您想支持从 ODP.net 到 Oracle 的分布式事务,您必须在客户端计算机上运行 Oracle MTS 恢复服务。它包含在 ODAC 安装包中。

    【讨论】:

    • 我确实运行了 Oracle MTS 恢复服务。但是,从您提到 ODP.net 的评论来看,这是否意味着 System.Data.OracleClient 不适用于事务,而必须使用 ODP.net?在尝试之前我先问一下,因为我们已经使用 System.Data.OracleClient 并且切换可能对我们来说是一项漫长的任务。
    • 另外,我想补充一点,我只是从 wcf 服务向单个数据库发送查询,所以我不确定这是否符合分布式事务的条件?
    • 我没有使用 microsoft OracleClient 的经验,所以很遗憾我无法为您提供帮助。但是,我已经使用 TransactionScope 通过 ODP 进行分布式事务。我遇到的问题之一是安装 MTS 恢复服务。仅供参考,如果事务在多台机器上传播,那么根据定义它是分布式的。
    猜你喜欢
    • 2012-03-16
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2014-06-18
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多