2013-09-28 87 views
2

我有一個C#.NET Web應用程序,它運行在Server 2008 R2,.NET V4,MVC 3,SQL Server 2012上的IIS 7中。該應用程序可以在一堆機器上工作,但是我們剛剛拿到一臺新電腦,而且這臺機器的行爲稍有不同。C#.NET從Web應用程序訪問串行端口

特別是,當應用程序打開System.IO.Ports.SerialPort並寫入時,實際上沒有數據在COM1上傳輸。似乎也沒有例外。該應用程序繼續等待響應,並超時。

如果我關閉了我的應用程序並使用Termite(終端程序)檢查COM端口是否正常工作,那麼數據就會從串口出來。所以串口,驅動程序等似乎沒問題。

如果我的應用程序試圖打開端口時,我有Termite連接到COM1,我得到一個Access Denied異常(如我所期望的)。所以我的應用似乎試圖訪問正確的端口。

但是,如果沒有其他使用COM1的應用程序,我的應用程序不會有任何例外 - 但串行端口不會出現任何異常。

有沒有人有任何關於如何調試這種情況的建議?

+1

這是一個有點不同尋常,一個Web應用程序訪問的低級IO像COM 1直接尤其是串行的,服務的併發請求。你會澄清運行Web應用程序的身份(運行應用程序池的身份)嗎?並檢查了主機的Windows事件嗎? – ZZZ

+1

硬件是一樣的嗎?此COM不需要特殊設置?它是真正的COM還是虛擬COM? – ilansch

+0

感謝AndyH和ilansch。新機器有不同的硬件。該應用程序池是「ASP.NET v4.0」。我的應用程序有一個線程從儀器獲取數據並填充數據庫。其他(Web服務)線程可以檢索數據並管理數據採集線程。 – John

回答

2

我有同樣的問題 - C#SerialPort無法連接到我的串行設備,但Termite儘管遵循設備手冊。

我將SerialPort屬性與我的白蟻設置進行了比較,發現兩者之間存在一些術語差異。例如,Termite可以選擇「DTR/DTS」(我需要),而SerialPort沒有任何稱爲「DTS」的東西。設置一個串口對象的這些特性爲我工作:

DtrEnable = true; 
RtsEnable = true; 
相關問題