時々この例外が発生し、これをデバッグする方法についていくつかの洞察を得ることができるSOやGoogle上で何かを見つけることができないようです。TransactionInterop.GetDtcTransaction()throw ArgsNullException ...時々
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
なぜ私は「利用可能なトランザクションが存在しないだろう既に明示的に作成されていますか?
これは完全なスタックですか、いくつかのフレームをスキップしましたか?どのバージョンのODP.NETを使用していますか?また、接続文字列を教えてもらえますか?あなたは取引参加が必要ですか? –
'RetrieveMessage()'メソッドの本体を見ることができますか?いくつかの 'OracleConnection'インスタンスで' .Open() 'と書かれた行がなければなりません。そのインスタンスはどのように設定されていますか? –
Simon、Jeppe、あなたがリクエストした情報を追加しました。追加のフレームは省略されており、接続文字列とODP.NETのバージョンがリストされています。 –