私は時々この例外を受け取ります.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
すでにトランザクションを明示的に作成しているのに、トランザクションが利用できないのはなぜですか?