Se recibe una SocketException al usar la agrupación de conexiones WCF
En este artículo se describe cómo recibir una aplicación Windows Communication Foundation (WCF) usa la SocketException agrupación de conexiones.
Versión del producto original: Windows Communication Foundation
Número KB original: 2607014
Resumen
Una aplicación WCF que usa la agrupación de conexiones puede experimentar excepciones de socket cuando se devuelven conexiones al grupo de conexiones. Si activa el seguimiento de WCF, verá un evento similar al siguiente:
<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>
Más información
Cuando un cliente WCF intenta abrir una nueva conexión, el código System.ServiceModel intenta obtener una conexión del grupo de conexiones. En algunos casos, es posible que la conexión del grupo de conexiones haya pasado el tiempo de espera. Se intenta una salida correcta al intentar leer desde la conexión. Si la conexión del servidor WCF ha pasado el tiempo de espera y su restablecimiento de la conexión, cuando el cliente WCF intente leer desde la conexión, se producirá un error y se producirá un SocketException error. Esto SocketException se genera en el código y lo controla el Sytem.Net System.ServiceModel código. A continuación, se cierra la conexión de cliente. Dado que esta excepción se controla en el código y no se vuelve a devolver al código de la aplicación, esta excepción System.ServiceModel puede omitirse.
Si adjunta un depurador y se interrumpe cuando se genera, verá una pila de llamadas administradas similar a la siguiente:
0:040> !clrstack OS Thread Id: 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.CommunicationPool2+EndpointConnectionPool[[System.__Canon, mscorlib],[System.__Canon, mscorlib]]. CloseIdleConnection(System.__Canon, System.TimeSpan) 1df4df34 69c44ddddd 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()