2014-06-19 21 views
1

首先,我們有一個使用NHibernate(版本3)和Oracle 11g數據庫的MVC Web應用程序。幾分鐘後ASP.NET MVC + NHibernate + Oracle應用程序中的連接問題

應用程序運行正常,但是當我們在生產服務器上發佈一個奇怪的情況發生了:

  1. 用戶訪問的應用程序和執行任務,例如,選擇鏈接到菜單。
  2. 用戶等待幾分鐘(2-3分鐘)。
  3. 用戶執行另一個任務,例如,重新加載相同的頁面或選擇另一個鏈接到菜單中。
  4. 應用程序失敗,出現ORA-12571: TNS:packet writer failure異常。
  5. 用戶只是刷新錯誤頁面,應用程序工作。

我們試圖做的第一件事就是找出問題,所以我們發佈的應用程序到另一個服務器完全相同的配置:當然

  1. 相同的二進制文件。
  2. 相同的Oracle x64客戶端版本,甚至是次要版本。
  3. 與IIS 7.5相同的Windows Server 2008版本。
  4. 相同的IIS配置(我們使用WinMerge比較了windows/system32/inetsrv/config文件)。
  5. 訪問相同生產數據庫。

令人驚訝的是,我們無法再現問題。

請問,有人對發生了什麼事情有線索?

+2

聽起來更像是與防火牆設置或防病毒有關的東西,看看http://www.dba-oracle.com/t_ora_12571_tns_packet_writer_failure.htm –

+0

它可能是。但實際上這是oracle客戶端驅動程序中的一個問題。 – gustavodidomenico

+0

@LowFlyingPelican:是的,它可能是防火牆,但在某些情況下,不可能更改Oracle服務器或防火牆設置(不受我們的控制)。 Gustavo的解決方案似乎比我的案例簡單得多。 –

回答

1

問題與服務器的oracle客戶端的連接池有關。它似乎將無效的連接傳遞給Web應用程序,而在其他服務器中則不會發生。

該解決方案不是很有趣,但將Validate Connection = True放入連接字符串中可解決問題。我意識到這個表現的損失,但我沒有選擇。

PS:使用此標誌,每個連接都由連接池服務進行驗證,然後在之前爲客戶端應用程序提供該連接。這不是很好,因爲每次連接請求都會發生數據庫往返。

+0

我已經搜索了一段時間的類似問題的解決方案,我認爲這是我能想到的最好的解決方案。感謝您確認它正在工作。 –