第一次做Oracle的 分布式事务处理,被搞了个头破血流,连续弄了2天半,终于搞定了,期间遇到了各种问题,Google的我手都累了,开始还有信心,最后一个又一个的新错误提示,让我开始有点点绝望了,下来我把我的精力整理一篇文章,以便后人在处理上少走弯路。
在此期间还要感谢Sam,King同学,虽然不是一个公司的,但是作为共同的软件服务商,大家还是很热情的,虽然他老说他很忙,但我还是拉住他问了很多问题
首先我解释一下下面几个错误的造成原因
{System.Data.OracleClient.OracleException: ORA-00161: 事务处理的分支长度 82 非法 (允许的最大长度为 64)}
ORA-00161: transaction branch length 82 is illegal (maximum allowed 64)
Access violation at address 07C2DEEE in module oran11.dll
这三种错误说明了你的客户端有多个版本,比如说我,我有10g,11g 并且 环境变量里面这两个Home地址都有
ORA-12154: TNS:could not resolve the connect identifier specified
你要把 11g Home目录下的 network /admin / simple /下的 tnsnames.oRA 拷贝到 network /admin / 目录下
{"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"}
数据库连接字符串问题,推荐写法:connectionString="Data Source=TMS;User ID=EX;Password=adm;Unicode=True"
最后一个问题
StackTrace='\0' at System.Data.OracleClient.OciEnlistContext.Join(OracleInternalConnection internalConnection, Transaction indigoTransaction)\r\n at System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, Transaction transaction, Boolean manualEnlistment)\r\n at System.Data.OracleClient.OracleInternalConnection.Activate(Transaction transaction)\r\n at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)\r\n at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)\r\n at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)\r\n at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory
这个问题是因为你用的Win7 做开发,请换操Xp作系统,你的WCF服务要部署到VS2008的虚拟IIS上面。 我在msdn上有回复
{"Unable to get error message (161) (0)."} ?? in TransactionScope