我正在使用一個winform應用程序,它將訪問作爲Windows服務自行託管的WCF服務。我正在使用ChannelFactory而不是服務引用。我已經成功地連接並調用了WCF服務。問題是當我讓應用程序保持閒置20分鐘,然後嘗試撥打另一個電話。我收到以下錯誤:WCF ChannelFactory和連接超時的最佳做法
「套接字連接被中止,這可能是由於處理您的消息時出錯或遠程主機超出接收超時或基礎網絡資源問題導致的。 00:00:59.9489970' 「。
我正在尋找管理連接的最佳做法。我目前已經創建了一個名爲PrepareWCFConnection的函數(見下文),它檢查通道和ChannelFactory的狀態。我在調用WCF服務之前調用了這個方法。有沒有更好的方法來處理這個問題?
public bool PrepareWCFConnection()
{
if ((channelFactory == null) ||
(channelFactory.State == CommunicationState.Faulted) ||
(channelFactory.State != CommunicationState.Opened))
{
channelFactory = new ChannelFactory<IService1>(new NetTcpBinding(), endpointAddress);
}
if ((proxy == null) ||
(((IClientChannel)proxy).State == CommunicationState.Faulted) ||
(((IClientChannel)proxy).State != CommunicationState.Opened))
{
proxy = channelFactory.CreateChannel(endpointAddress);
((IClientChannel)proxy).Open();
}
return true;
}
更多上述代碼的測試證明它不起作用。 ChannelFactory和channel都是打開的,但讓系統空閒後仍然出現這個錯誤:套接字連接被中止。這可能是由處理您的消息時出錯或遠程主機超出接收超時或基礎網絡資源問題引起的。本地套接字超時爲'00:00:59.9479970'。 – econner 2011-12-16 18:47:37
以下是MSDN的鏈接,其中顯示了創建頻道工廠和頻道,進行調用並關閉頻道,然後關閉頻道工廠。但是,如果您使用信用卡進行身份驗證,那麼在每次方法調用之後都不會關閉信道,並且在每種方法在資源和時間上都很昂貴之前重新創建信道? http://msdn.microsoft.com/en-us/library/ms734681.aspx – econner 2011-12-16 18:50:49