2011-09-01 54 views
1

我們有一個簡單的控制檯應用程序,用C#.NET 4.0編寫,當前在計劃任務上運行。這個控制檯應用程序直接從磁盤上直接取出文件,然後將它們上傳到同一臺機器上託管的ASP.NET網站。當在計劃任務上運行時,Web請求在控制檯應用程序中失敗

當此控制檯的觸發時間運行失敗,但下列情況除外:

Message: Unable to connect to the remote server 
Stack Trace: at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 
    at System.Net.HttpWebRequest.GetRequestStream() 
    at Program.Main(String[] args) in Program.cs:line 69 
Inner Exception: System.Net.Sockets.SocketException (0x80004005): No connection could be made because the target machine actively refused it 127.0.0.1:80 
    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) 

然而,當我們手動運行該應用程序運行完全正常,以及當我們去到計劃任務和運行該任務手動執行而不會出錯。

我們有當前爲其所嘗試連接的域配置的主機文件返回到您可以在異常中看到的環回IP。這是由於防火牆配置不允許內部連接到外部IP。

的計劃任務的其他信息:

  • 它被設置爲在管理員憑據,並具有最高權限運行。
  • 只運行一次,每天
  • 它執行沒有問題,其他業務(移動和重命名文件 )
  • 上HttpWebRequest.GetRequestStream出現的錯誤()
+0

你在127.0.0.1:80上收聽什麼? –

+0

這是一個Web服務器,因此IIS將在端口80上偵聽。 – Mmerrell

回答

2

最終這是一個非常奇怪的情況,最終解決了這個問題。

原來發生的事情是最終成爲一個計劃任務,在同一時間強制執行IIS重置時運行。那麼IIS重置會打,而當它試圖開始備份這個過程將嘗試上傳文件。上傳當然會失敗並出現上述錯誤消息,因爲IIS服務啓動時,端口80上沒有任何監聽。

正在運行的計劃任務是針對釋放IIS將使用的資源的另一個問題的舊修復程序。它在不同的用戶下,因此需要進一步挖掘才能找到。一旦它被禁用,日常流程就會毫無問題地運行。

+0

+1來記錄解決方案,即使這是一個老問題 – Gorgen

0

你需要檢查誰在使用端口80.檢查Skype是否在運行?

+0

我遇到過很多類似你描述的情況,我發現Skype佔用80端口並導致'HttpRequest'失敗。 –

+0

Skype未安裝在本機上。 – Mmerrell

+0

我建議使用網絡嗅探器,這樣您就可以知道哪個進程/線程使用端口80 –

0

我正在與Web客戶端類似的錯誤:

無法連接到遠程serverSystem.Net.Sockets.SocketException(0X80004005):連接嘗試失敗,因爲連接的方沒有正確後響應一段時間,或已建立的連接失敗,因爲連接的主機未能響應123.456.789.000:80

我有我的ScheduledTask「跑用戶是否登錄或不」,而與代碼失敗(2) 。

我將其更改爲「僅在用戶登錄時運行」並解決該問題。

相關問題