2011-07-26 2 views
2

저는 트랜잭션 NTFS를 사용하여 파일 시스템의 파일을 읽고 쓰는데, 응용 프로그램이 다시 시작될 때만 해결되는 간헐적 인 오류가 발생하는 것으로 나타났습니다. 오류에 대한 스택 추적 :TxNTFS를 사용하는 이상한 간헐적 인 오류

System.Runtime.InteropServices.COMException (0xD0190052): Exception from HRESULT: 0xD0190052 
    at ...KtmTransactionHandle.IKernelTransaction.GetHandle(IntPtr& handle) 
    at ...KtmTransactionHandle.CreateKtmTransactionHandle(Transaction managedTransaction) 
    at ...KtmTransactionHandle.CreateKtmTransactionHandle() 
    at ...TransactedFile.Open(String path, FileMode mode, FileAccess access, FileShare share) 
    at ...TransactedFile.ReadAllText(String path) 

IKernelTransaction 내가 핸들을 얻을 COM 인터페이스입니다 : 여기

[ComImport] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    [Guid("79427A2B-F895-40e0-BE79-B57DC82ED231")] 
    private interface IKernelTransaction 
    { 
     void GetHandle([Out] out IntPtr handle); 
    } 

IKernelTransaction tx = (IKernelTransaction)TransactionInterop.GetDtcTransaction(Transaction.Current); 

내 코드입니다 http://msdn.microsoft.com/en-us/library/cc303707.aspx과 매우 유사

문제는 내가 어떤 정보도 찾을 수 없다는 것입니다. 이 COM 오류 0xD0190052 ation. 이 오류 코드가 무엇인지 아는 것은 엄청난 도움이됩니다.

감사

+0

해당 HRESULT 코드로 FormatMessage (P/Invoke 또는 기본)를 시도 했습니까? – Yahia

+0

불행히도,이 코드는 자연 상태이며 테스트 머신에서는 본 적이 없습니다. 0xD0190052는 int를 오버플로하므로 Marshal.ThrowExceptionForHR 및 new Win32Exception에 -1173667886을 전달했습니다. 두 경우 모두 알 수없는 오류가 발생했습니다. – Phill

+0

[AlphaFS] (http://alphafs.codeplex.com/) 옵션을 사용하고 있습니까? – shambulator

답변

1

순수 투기
HRESULT 0xD0190052가 0xC0190052 인 STATUS_TRANSACTIONMANAGER_NOT_ONLINE 매우 유사하다 ... 차이가 코드가 소위 NTSTATUS인지를 나타내는 "N"- 비트이다 (참조 http://msdn.microsoft.com/en-us/library/0642cb2f-2075-4469-918c-4441e69c548a%28PROT.10%29.aspxhttp://msdn.microsoft.com/en-us/library/cc231200%28v=PROT.10%29.aspxhttp://msdn.microsoft.com/en-us/library/cc704588%28v=PROT.10%29.aspx) ...

보인다하거나 응용 프로그램이 때때로 트랜잭션 관리자 또는 연결을 푼다 당신이 설명에서

트랜잭션 관리자를 다시 시작/불안정하거나 유사하다 ...

,또한 일부 HRESULT 설명을 받고 도움을 줄 수 귀하의 COM 가져 오기에 PreserveSig(true)을 definig

... 사건이 어떤 의미가

희망 ...

편집 :

나는 코드가 확실하지 않다 당신은 모든 가능성을 고려하고 있습니다. ... TransactedFile.Open의 메소드에서 scope.Complete();에 대한 호출이 있습니다.하지만 사용하기 쉬운 블록 내에서이 호출을하기 전에 일부 코드가 불만을 내지 않는 경우가 있습니다. http://msdn.microsoft.com/en-us/library/ms172152.aspx

에 따라210
+0

좋은 형사 작업! 그럴듯 해 보입니다. 질문은 연결이 끊어지는 방식입니다. 더 조사 할 것이 있다면 아무것도 조사 할 것입니다. 감사! – Phill

+0

내 편집 참조 ... 도움이 되길 바랍니다 :-) – Yahia

+0

고마워요,하지만 무슨 뜻인지 모르겠군요. TransactionScope은 using 블록에 있으므로 예외가 발생하면 Dispose 메서드가 호출되어 트랜잭션을 롤백하고 정리해야합니다. 나는 다른 것을 놓치고 있니? – Phill

관련 문제