Tengo una muestra de WCF proyecto que reproducen un problema que tengo con mi verdadera aplicación de WCF.
Puede descargar el código fuente de mi ejemplo de aplicación de WCF aquí

Según a los tiempos de espera se establece en el código y los archivos de configuración, no entiendo qué es appening :

**** Server exception : System.ServiceModel.CommunicationObjectAbortedException: 
The communication object, System.ServiceModel.Security.SecuritySessionServerSettings+SecurityReplySessionChannel, cannot be used for communication because it 
has been Aborted.
at System.ServiceModel.Channels.CommunicationObject.ThrowIfClosedOrNotOpen()
at System.ServiceModel.Security.SecuritySessionServerSettings.ServerSecuritySessionChannel.SecureApplicationMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
at System.ServiceModel.Security.SecuritySessionServerSettings.SecuritySessionRequestContext.OnReply(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.RequestContextBase.Reply(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.RequestContextBase.Reply(Message message)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.Reply(MessageRpc& rpc)
**** client exception : : System.ServiceModel.Security.MessageSecurityException: An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail. ---> System.ServiceModel.FaultException: The message could not be processed. This is most likely because the action 'http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Cancel' is incorrect or because the message contains an invalid or expired security context token or because there is a mismatch between bindings. The security context token would be invalid if the service aborted the channel due to inactivity. To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.
--- End of inner exception stack trace ---
Server stack trace: 
at System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.ProcessRequestContext(RequestContext requestContext, TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
at System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.ReceiveInternal(TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
at System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.CloseOutputSession(TimeSpan timeout)
at System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.CloseSession(TimeSpan timeout, Boolean& wasAborted)
at System.ServiceModel.Security.SecuritySessionClientSettings`1.ClientSecuritySessionChannel.OnClose(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnClose(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
Exception rethrown at [0]: 
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
at System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
at System.ServiceModel.ClientBase`1.Close()
at System.ServiceModel.ClientBase`1.System.IDisposable.Dispose()
at WindowsFormsApplication1.Program.Main() in C:\Users\sdoucet\Documents\Visual Studio 2008\Projects\TestWCFLongExecution\WindowsFormsApplication1\Program.cs:line 25

OriginalEl autor Sebastien | 2009-11-12

3 Comentarios

  1. 7

    Hemos tenido un problema similar porque el grupo de aplicaciones que aloja el servicio fue configurado para tener el Máximo de los Procesos de trabajo mayor que 1. Para llamar a Abortar o Cerca de tener éxito, se necesita para ser enviado a la misma instancia de servicio que se encargó de la solicitud original.

    Gracias por publicar esto, yo tenía el mismo problema a los clientes en el entorno de ensayo. Uno de sus desarrolladores habían establecer el Máximo de Procesos de trabajo’ a 5, haciendo que estas excepciones. Estábamos usando wsfederationhttpbinding y tienen un Servicio de Token de Seguridad (STS) en el lugar también, por lo que la excepción fue tirar aún más confuso – lo que sugiere que el token no era válido. De hecho, la petición fue sólo a veces de ser dirigida hacia el mal proceso de trabajo.
    Hemos observado el mismo problema y lo estamos usando wshttpbinding con la seguridad de los mensajes. Tener Netscalar equilibradores de carga en la parte delantera de la web del servicio de máquinas triage aún más difícil. Inicialmente se pensó que el LB no era el mantenimiento de sticky sessions, y trató de ver si el LB de los equaltion podría resolver el problema. Pero no lo hizo y fue entonces cuando nos dimos cuenta de que el Máximo de Procesos de trabajo se estableció para más de 1.

    OriginalEl autor Matt Poland

  2. 2

    Tuve un problema similar, donde hice un servicio wcf llamada asincrónica. Después de recibir el resultado en la async_completed método conseguí una excepción.

    «se produjo Una excepción durante la operación, haciendo que el resultado no válido. Compruebe InnerException de excepción»

    InnerException:

    «El objeto de comunicación puede ser utilizado para la comunicación debido a que ha sido Abortado»

    Después de mucho esfuerzo he de encontrar la solución, capturar la excepción, sin tirar la async_completed método. (es decir, implementado el try/catch). Yo no entiendo cuál es el problema exacto, pero de alguna manera el canal de comunicación está rompiendo.

    He probado la anterior aproximación desde el siguiente enlace

    http://geekswithblogs.net/SoftwareDoneRight/archive/2008/05/23/clean-up-wcf-clients–the-right-way.aspx

    Todavía no estoy convencido de que este es el enfoque correcto, pero como por mi escenario con el resultado de la operación no estoy haciendo nada furtherly. Así es la captura de la excepción y detener el servicio.

    OriginalEl autor User_MVC

  3. 1

    Parece que está pasando excepciones de vuelta al cliente. WCF no como regular excepciones, quiere fauls o un FaultException en caso de errores. Después de excepción y se ha devuelto el canal está en una falla del estado y no puede ser utilizado de nuevo. Después de un FaultException el canal es aún utilizable.

    Tienes razón, pero no se produce la excepción por mi código. Es lanzado por la WCF infraestructura. I wan’t saber por qué esta excepción es lanzada y cómo evitarlo. Sé que mi servicio es correr durante 10 minutos, pero de acuerdo a los tiempos de espera de los conjuntos, no entiendo la excepción.
    La primera cosa a hacer es habilitar el seguimiento en el servicio. Esto a menudo le dan un montón de información sobre lo que el problema original.

    OriginalEl autor Maurice

Dejar respuesta

Please enter your comment!
Please enter your name here