servicemodel section net example endpointconfigurationname endpointaddress bindings address wcf connection custom-binding

section - Usando WCF para envolver un flujo conectado existente



servicemodel client configuration section (1)

Tengo ambos extremos de un Stream conectado bidireccional, sobre el que quiero hacer alguna comunicación. La implementación subyacente detrás de la secuencia no es importante, quiero trabajar en el nivel de la Stream ...

En lugar de implementar mi propio protocolo de comunicaciones para el flujo, quiero usar toda la bondad de WCF existente para envolver el flujo existente con un canal de comunicaciones de WCF bidireccional (solicitud / respuesta + devolución de llamada).

Mi pregunta es, ¿cómo puedo hacer esto ...?

ACTUALIZAR:

He recorrido el camino de implementar un transporte personalizado. Tengo esto funcionando, pero todavía no estoy del todo contento con eso ...

He implementado un IDuplexSessionChannel para envolver el flujo, junto con IChannelFactory y IChannelListener , y un elemento de enlace para crear las fábricas de canales. Ahora, solo paso a través del flujo conectado y, finalmente, los paso al canal de transporte cuando se crea.

Por lo tanto, puedo crear el proxy del cliente para acceder al servicio a través del flujo de la siguiente manera:

var callback = new MyCallback(); var instanceContext = new InstanceContext( callback ); var pipeFactory = new DuplexChannelFactory<IMyService>( instanceContext, new StreamBinding(clientStream), new EndpointAddress("stream://localhost/MyService")); var serviceProxy = pipeFactory.CreateChannel();

El problema que tengo es que parece que WCF está configurado para usar un ServiceHost para crear el extremo del servidor del canal, a través de un IChannelListener . En mi caso, ya tengo una transmisión conectada y no podré escuchar más conexiones entrantes. Puedo solucionar este problema, pero preferiría no usar un ServiceHost para crear el extremo del canal del servidor, porque termino con una gran cantidad de repeticiones y hacks para hacer que funcione.

Preguntas

Estoy buscando, por lo tanto, una mejor manera de tomar IDuplexSessionChannels, y envolverlos en un proxy de canal en los extremos del servidor y del cliente.

O tal vez una implementación diferente de ServiceHost que no requiera un IChannelListener .

Realmente, el problema aquí es que no quiero un solo servidor, la disposición de varios clientes, tengo una relación 1-1 entre mi Servicio WCF y el cliente. ¿Hay una manera correcta de instanciar uno de estos?

Para ponerlo de otra manera, quiero crear la instancia de servicio del lado del servidor sin usar un ServiceHost.

Cualquier sugerencia sería apreciada en esta etapa.


Utilice un cliente en ambos extremos. Sin embargo, tendrá que definir sus contratos cuidadosamente. Si tiene ClientA y ClientB en cualquiera de los extremos de la transmisión, cuando ClientA envía una solicitud, ClientB espera que se parezca a lo que ve, ya que está definido como contrato de devolución de llamada y viceversa.