2014-02-12 102 views
4

我有以下異常的問題:事務超時

與當前連接關聯的事務已完成 但尚未佈置。該事務必須在 連接可用於執行SQL語句之前進行處理。

的「呼叫」針對數據庫需要10米53S(沒有事務測試和succeded) 以及與交易它拋出10米後的異常。所以我很確定這不是產生問題的代碼,而是事務超時限制。

我已經看到很多人都在爲這個問題而努力,但我已經嘗試了所有可能的解決方案,但我仍然沒有成功擺脫這個異常。

下面的代碼我用:

[...] 
TransactionOptions transactionOptions = new TransactionOptions(); 
transactionOptions.IsolationLevel = IsolationLevel.Snapshot; 
transactionOptions.Timeout = new TimeSpan(0, 0, 30, 0, 0); 

using(var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions)) 
{ 
    foreach (var selector in GetDataContext().sp_GetChangedSelectors(changeSet)) 
    { 
      // xml-result will be stored in a file 
    } 

    // multiple other SP calls the same way 

    scope.Complete(); 
} 

%WINDIR%添加的聲明

<system.transactions> 
    <machineSettings maxTimeout="02:00:00"/> 
</system.transactions> 

的machine.config \ Microsoft.NET \ Framework64 \ v4.0.30319 \兩臺機器上的Config (本地和sql-server-machine)。

我用盡了想法,我可以嘗試下一步。有什麼建議麼?

回答

1

只是一個瘋狂的猜測:你運行一個32位的應用程序?那麼這可能是錯誤的machine.config!

%WINDIR%\ Microsoft.NET \框架\ v4.0.30319

否則我會檢查,如果這個值是覆蓋在web.config或app.config中

+0

我會試一試 – Viper

+0

@Viper你應該在任務管理器的「進程」選項卡中看到,如果應用程序是32位的(exe的名稱附有一個_ * 32_) – toATwork

+0

不錯。那就是=)非常感謝你。不要考慮32位和64位的問題。 – Viper

1

確保你修改的權利machine.config文件。

根據您編譯應用程序的方式(AnyCPU/x64/x86,「比較喜歡32位」),所使用的machine.config將會不同(Framework vs Framework64)。

還要確保在修改machine.config後重新啓動機器。

+0

也感謝你。但'toAtwork'是第二快:) – Viper

+0

@Viper你可以upvote兩個anwers雖然;) – toATwork