가끔이 예외가 발생하여 디버깅 방법에 대한 통찰력을 얻을 수있는 여기 또는 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 프레임 워크 3.5 SP0
왜이 트랜잭션을 사용할 수 없습니다 것 이미 명시 적으로 만들었습니까?
전체 스택입니까, 아니면 일부 프레임을 건너 뛰셨습니까? ODP.NET의 어떤 버전을 사용하고 있습니까? 또한 연결 문자열을 알려주시겠습니까? 거래 입대가 필요합니까? –
'RetrieveMessage()'메쏘드의 본문을 볼 수 있습니까? 일부 'OracleConnection' 인스턴스에서'.Open()'이라고하는 줄이 있어야합니다. 인스턴스가 어떻게 설정되어 있습니까? –
Simon, Jeppe, 내가 요청한 정보를 추가했습니다. 생략 된 추가 프레임은 없으며 연결 문자열과 ODP.NET 버전을 나열했습니다. –