El cliente envía una gran cantidad de mensajes al servidor desde un solo hilo, en un solo canal WCF.¿Por qué mi mensaje se procesa fuera de servicio en un solo canal WCF TCP (con ConcurrencyMode.Reentrant)?
El cliente envía el mensaje con BeginMyMethod (x, b) ya que no desea bloquearlo mientras se procesa.
Tenemos mensajería confiable activada, ya que no deseamos perder ningún mensaje, ni hacer que se descompongan.
Sin embargo, los mensajes se envían a varios hilos en el servidor, por lo que están en proceso fuera de servicio.
No podemos hacer que el servidor sea de una sola hebra, ya que no deseamos que una solicitud de larga ejecución de un cliente bloquee otros clientes.
Así que sólo desea procesar todos los mensajes que provienen de un solo cliente (por un solo canal ) en fin con único mensaje de cada cleint está procesando a la vez.
Esto sería fácil para la programación de socket raw, sin embargo, ¿cómo puedo obtener WCF para que funcione como yo lo desee?
Ahora estoy pensando que ConcurrencyMode.Reentrant no se comporta bien cuando se utiliza con InstanceContextMode.Single Si fijo ConcurrencyMode.Single utilizar los mensajes se mantienen en orden, pero mi devoluciones de llamadas punto muerto.
(La prueba que obtiene los mensajes fuera de servicio no tiene devoluciones de llamada y no realiza ninguna llamada WCF saliente, por lo que esperaría que ConcurrencyMode.Reentrant se comporte igual que ConcurrencyMode.Single en esa prueba determinada, pero no lo hace)
I a no utilizar los archivos de configuración de WCF, el código es:
serviceHost = new ServiceHost(this);
serviceHost.AddServiceEndpoint(
typeof(IAllEngineManagersAsyncCallbacks),
new NetTcpBinding(SecurityMode.None, true),
endPointAddress);
¿Qué es un "presbiterio"? Usaste esa palabra tres veces. ¿Te refieres al canal? –
¿Puede publicar su configuración de enlace personalizada? – tgeros