如果出現以下錯誤信息,極有可能是連接數過多,WCF配置文件默認為10個連接數,如果連接服務的客戶端超過10個後,將訪問不到服務.信息如下:
System.TimeoutException: 請求通道在等待 00:01:00 以後答復時超時。增加傳遞給請求調用的超時值,或者增加綁定上的 SendTimeout 值。分配給此操作的時間可能是更長超時的一部分。 ---> System.TimeoutException: 對“http://localhost:8731/WCFTest/Service1/”的 HTTP 請求已超過為 00:01:00 分配的超時。為此操作分配的時間可能是較長超時的一部分。 ---> System.Net.WebException: 操作超時
在 System.Net.HttpWebRequest.GetResponse()
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- 內部異常堆棧跟蹤的結尾 ---
在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
在 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
--- 內部異常堆棧跟蹤的結尾 ---
Server stack trace:
在 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Channels.ClientReliableChannelBinder`1.RequestClientReliableChannelBinder`1.OnRequest(TRequestChannel channel, Message message, TimeSpan timeout, MaskingMode maskingMode)
在 System.ServiceModel.Channels.ClientReliableChannelBinder`1.Request(Message message, TimeSpan timeout, MaskingMode maskingMode)
在 System.ServiceModel.Channels.ClientReliableChannelBinder`1.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
在 WCFClient.ServiceReference1.IService1.DoWork(String str)
在 WCFClient.ServiceReference1.Service1Client.DoWork(String str) 位置 F:\sss\WCFTest\WCFClient]\Service References\ServiceReference1\Reference.cs:行號 50
在 WCFClient.Program.Main(String[] args) 位置 F:\sss\WCFTest\WCFClient]\Program.cs:行號 19
解決方案:
1)首先保證客戶端每次建立的連接在使用完成後進行關閉.即調用Close()方法,否則此連接會在設置的會話(一般為10分鐘)後才自動關閉.期間任何客戶端也無法使用此服務.
2)如果默認的連接數不能滿足客戶端的需要,可以增加連接數.配置文件如下:
<serviceThrottling maxConcurrentCalls="20" maxConcurrentSessions="20" maxConcurrentInstances="30" />
說明:maxConcurrentCalls :最大並發數,默認為16
maxConcurrentSessions :最大的會話數,主要針對於PerSession的情況,默認為10
maxConcurrentInstances:最大實例數,默認為26