Vous recevez un SocketException lors de l’utilisation du regroupement de connexions WCF

Cet article décrit la réception d’un SocketException lorsque l’application Windows Communication Foundation (WCF) utilise le regroupement de connexions.

Version du produit d’origine :   Windows Communication Foundation
Numéro de la base de connaissances initiale :   2607014

Résumé

Une application WCF qui utilise le regroupement de connexions peut connaître les exceptions de socket lorsque les connexions sont renvoyées au pool de connexions. Si vous activez le suivi WCF, vous verrez un événement semblable à celui-ci :

<TraceRecord xmlns="[https://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord](https://schemas.microsoft.com/2004/10/e2etraceevent/tracerecord)" Severity="Information">
   <TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.Channels.ConnectionPoolIdleTimeoutReached.aspx</TraceIdentifier>
   <Description>A connection has exceeded the idle timeout of this connection pool (00:02:00) and been closed.</Description>
   <AppDomain>/LM/W3SVC/1/ROOT/QSPolicy-1-129558237523483320</AppDomain>
   <Source>System.ServiceModel.Channels.IdlingCommunicationPool`2+IdleTimeoutEndpointConnectionPool+IdleTimeoutIdleConnectionPool[System.String,System.ServiceModel.Channels.IConnection]/5317080</Source>
</TraceRecord>

Informations supplémentaires

Lorsqu’un client WCF tente d’ouvrir une nouvelle connexion System.ServiceModel , le code tente d’obtenir une connexion à partir du pool de connexions. Dans certains cas, la connexion de pool de connexions peut avoir expiré. Une tentative de sortie progressive est tentée en tentant de lire à partir de la connexion. Si la connexion au serveur WCF a expiré et que sa connexion est réinitialisée, lorsque le client WCF tente de lire à partir de la connexion, il obtiendra une erreur et a SocketException est déclenché. Cela SocketException est déclenché dans Sytem.Net le code et est géré par le System.ServiceModel code. La connexion client est ensuite fermée. Étant donné que cette exception est gérée dans le System.ServiceModel code et qu’elle ne s’obtient pas de nouveau, cette exception peut être ignorée.

Si vous attachez un débogueur et arrêtez lorsque le est déclenché, vous observerez une pile des appels managée semblable à la suivante :

0:040> ! ID de thread du système d’exploitation clrstack : 0x16a8 (40) ESP EIP 1df4dc98 76e1c83b [HelperMethodFrame : 1df4dc98] 1df4dd3c 6de87ada System .net. Sockets. Socket. BeginReceive (Byte [], Int32, Int32, System .net. Sockets. SocketFlags, System. AsyncCallback, System. Object) 1df4dd68 6986ea7e System. ServiceModel. Channels. SocketConnection. BeginReadCore (Int32, Int32, System. TimeSpan, System. Threading. WaitCallback, System. Object) 1df4dde0 6986de7d System. ServiceModel. Channels. SocketConnection. CloseAsyncAndLinger () 1df4de2c 6986eea4 System. ServiceModel. Channels. SocketConnection. Close (System. TimeSpan, Boolean) 1df4de84 6984e721 System. ServiceModel. Channels. BufferedConnection. Close (System. TimeSpan, Boolean) 1df4dec4 69855cb8 System. ServiceModel. Channels. ConnectionPool. CloseItemAsync (System. ServiceModel. Channels. IConnection, System. TimeSpan) 1df4ded4 697f0be8 System. ServiceModel. Channels. IdlingCommunicationPool 2+IdleTimeoutEndpointConnectionPool[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].CloseItemAsync(System.__Canon, System.TimeSpan) 1df4def0 697f095c System.ServiceModel.Channels.CommunicationPool 2 + EndpointConnectionPool [[System. __Canon, mscorlib], [System. __Canon, mscorlib]]. CloseIdleConnection (System. __Canon, System. TimeSpan) 1df4df34 69c44ddd System. ServiceModel. Channels. CommunicationPool' 2 + EndpointConnectionPool [[System. __Canon, mscorlib], [System. __Canon, mscorlib]]. TakeConnection (System. TimeSpan) 1df4dfa0 6918280b System. ServiceModel. Channels. ConnectionPoolHelper. EstablishConnection (System. TimeSpan) 1df4e054 69182607 System. ServiceModel. Channels. ClientFramingDuplexSessionChannel. OnOpen (System. TimeSpan) 1df4e098 690f1c16 System. ServiceModel. Channels. CommunicationObject. Open (System. TimeSpan) 1df4e0dc 691923f2 System. ServiceModel. Channels. ServiceChannel. OnOpen (System. TimeSpan) 1df4e0f0 690f1c16 System. ServiceModel. Channels. CommunicationObject. Open (System. TimeSpan) 1df4e134 690f1af2 System. ServiceModel. Channels. CommunicationObject. Open ()