我偶尔会遇到此异常,并且似乎无法在 SO 或 google 上找到任何可以了解如何调试此异常的信息。
System.ArgumentNullException: Value cannot be null.
Parameter name: transaction
at System.Transactions.TransactionInterop.
GetDtcTransaction(Transaction transaction)
at Oracle.DataAccess.Client.OracleConnection.Open()
at RetrieveMessage() ...
我的代码相当简单。RetrieveMessage()
是从队列中弹出消息的调用,但这无关紧要,因为这只是尝试打开连接而失败。
using (var scope = new TransactionScope(TransactionScopeOption.Required,
TimeSpan.FromMinutes(10)))
{
message = RetrieveMessage();
// ...
scope.Complete();
}
//...
public Message RetrieveMessage()
{
using (var cnn = new OracleConnection(ConnString))
{
cnn.Open(); //sometimes fails???
//... execute a stored procedure that calls dbms_aq.dequeue()
}
//... return dequeued message or null if queue is empty
}
我的连接字符串如下所示:Data Source=abc;User ID=test1;Password=test1;Pooling=true;Validate Connection=True
ODP.NET:版本 2.112.1.0,.NET Framework 3.5 SP0
当我已经明确创建了一个事务时,为什么没有可用的事务?