2009-11-21 2 views
0
가 나는 TransactionScope의 인스턴스를 만들고 일부 VB.NET 코드가있다

반환 객체의 인스턴스에. " 내 개발 시스템이나 테스트 시스템에서는 예외가 발생하지 않습니다. 고객 생산 기계에서만, 나는 이유를 모른다. 나는이 라인의 직전과 직후에 디버그 라인을 배치 했으므로 문제가되는 라인은 긍정적이다.인스턴스화하여 TransactionScope가 null

A는 응용 프로그램 전체에서 TransactionScopes를 사용했으며 이는 클라이언트 컴퓨터에서 예외를 throw하는 유일한 곳입니다.

"계약과 통화 데이터 연결 정보"는 로그에 기록되고 다음 로그 항목은 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"입니다.

코드를 트랜잭션 밖으로 이동하면 코드가 제대로 작동합니다.

저는 4 일 동안이 문제에 시달렸으며 가까이가 보지 못했습니다.

+0

어리석은 나를. 오류로 인해 트랜잭션이 중단되었으므로 디버그 로그가 데이터베이스에 기록되지 않습니다. 실제 원인은 가져 오기 사양과 가져올 데이터의 차이입니다. 결코 null이되어서는 안되는 필드는 사실 null입니다. 필자는 실제 데이터가 아닌 테스트 할 spec 파일의 샘플을 정확하게 가지고 있기 때문에 테스트에서이 파일을 선택하지 않았습니다. 지금은 너무 분명해. –

+0

ARgg, 완료했습니다. "중단하면 어떻게 할 것인가?"라는 논리를 쓰면 모든 것이 뒷받침됩니다. FYI 새로운 TransactionScope (TransactionScopeOption.Supress)를 사용하면 현재 트랜잭션 외부에서 DB 작업을 수행 할 수 있습니다. – Spence

답변

1

아마도 MSDTC에 문제가 있습니까?

나는 코딩 오류쪽으로 더 기울어 져야한다. 왜냐하면 TransactionScope 객체가 초기화되고 null이 아니기 때문에 오류가 발생했기 때문이다.

아마도 코드가 우리에게 더 도움이 될 것입니다.

업데이트 : 때로는 릴리스 모드 순서 변경으로 인해 예외가 발생하기 전에 로깅 엔진이 회선을 기록하지 못했습니다. 또는 루틴이 적극적으로 플러시되지 않고 앱이 완료되기 전에 급하게 충돌합니다.

using() 문 바로 뒤에 로깅 줄을 배치하면 TransactionScope가 null이 아니라고 주장 할 수 있습니다. 당신이 코드를 사용한 방식을 감안할 때, 그 코드의 결과가 null을 리턴하는 것은 불가능합니다. 생성자가 실패하면 생성자는 예외를 throw해야합니다. 그렇지 않으면 당신은 non-null 트랜잭션 범위를가집니다.

코드가 조금 더 많아서이 테스트가 도움이 될까요?

+0

도움이된다면 코드를 보여주기 쉽지만, 그 코드는 실패합니다. 주변 선은 디버그 선입니다. 모든 컴퓨터에서 MSDTC 설정을 확인한 결과 동일합니다. –

+0

내 대답을 업데이트했습니다 – Spence

+0

사실 IsNothing (ts)이 다음 NullReferenceException()을 던지는 행에 넣습니다 try catch를 추가하십시오. – Spence