2013-06-29 41 views
0

我在一個控制檯應用程序中託管了WCF服務,該應用程序預計將全天候運行並響應來自多個應用程序的請求。如果它連續獲取請求,或者甚至在4小時的空閒時間之後,它會很好用。寫入主機服務的代碼如下,自我託管的WCF服務在空閒幾個小時後沒有響應

static void Main(string[] args) 
    { 
     using (ServiceHost host = new ServiceHost(typeof(abcdService))) 
     { 
      host.Open(); 
      Console.ReadLine(); 
      host.Close(); 
     } 
    } 

在WCF服務中,我正在將輸出寫入控制檯。當它拋出超時錯誤時,我可以看到WCF服務中的方法從未收到請求。

是否有任何設置需要我自己託管的WCF服務響應簡單的呼叫,即使經過幾個小時的空閒時間?

我接收到的誤差在下面給出,

請求信道超時而00後等待答覆:00:59.9989999。增加傳遞給請求調用的超時值或增加綁定上的SendTimeout值。分配給此操作的時間可能是超時時間的一部分。 ---> System.TimeoutException:對HTTP的HTTP請求已超過00:01:00的分配超時。分配給此操作的時間可能是超時時間的一部分。 ---> System.Net.WebException:操作已超時。中止測試執行。

注意:當我重新啓動託管WCF服務的控制檯應用程序時,它又開始正常工作。

+0

顯示配置,實現,客戶端代碼,服務合同 –

+0

我與自己託管的服務具有完全相同的問題。在正常使用和重負載測試期間,它可以正常工作,但是在夜晚的某個時候 - 當沒有人使用它時,它會崩潰,我無法再從我的客戶端應用程序/瀏覽器訪問它。你有沒有找到你的問題的原因? –

+0

還沒有。但我們正在採取一種解決方法來減少問題的發生。基本上,我們通過Windows調度程序每天午夜重新啓動控制檯應用程序(.exe)。這減少了碰撞計數。 – Vim

回答

1

您的請求可能在服務器上排隊等待處理,然後超時。

1)在您的WCF服務中嘗試throttling

2)嘗試使用PerCall使用以下方法來刪除會話界面中的任何

[ServiceContract(Namespace="namespace", SessionMode=SessionMode.NotAllowed)] 

合同類實現接口

ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 

你應該能夠啓用跟蹤,看看究竟發生。