2008-12-19 12 views
9

Tengo una plataforma móvil en la que intento escribir algún código de comunicaciones.Cómo escribir un transporte personalizado basado en socket para WCF

La plataforma proporciona un mecanismo de comunicación patentado que se basa en funciones de socket estándar. Básicamente, la API de socket de la plataforma se ve exactamente igual que la API estándar de Windows Socket, excepto que tiene un prefijo en cada una de las funciones.

Me gustaría utilizar WCF para abstraer las complejidades de la API Sockets lejos de mis aplicaciones consumidoras, pero me está costando encontrar recursos que describan adecuadamente todas las piezas que necesitarían ser codificadas.

¿Alguien puede recomendar un buen lugar para comenzar, o proporcionar una descripción de lo que sería necesario para escribir un Transporte basado en Socket personalizado para WCF? Idealmente, me gustaría poder usar HttpBinding sobre este mecanismo de transporte.

Gracias!

Respuesta

10

Arreglé una lista de algunos resources para escribir los canales de transporte WCF que podrían ser útiles. No todos los enlaces todavía están activos, desafortunadamente, pero la mayoría sí y hay algunas cosas útiles allí.

También puse un short introduction sobre cómo encajan algunas de las piezas, lo que podría ayudar un poco.

Algo que no entiendo muy bien en su pregunta: Usted menciona que desea ejecutar el HttpBinding en la parte superior de su transporte. ¿Quiere decir que quiere usar el canal de transporte HTTP WCF en la parte superior de su API personalizada tipo socket en lugar de la API de sockets de Windows?

Si es así, entonces no, eso no funcionará por varias razones. Una de ellas es que las vinculaciones y los canales no están realmente unidos directamente. En cambio, la definición de enlace (es decir, qué elementos de enlace se incluyen en ella) controla cómo se crea la pila de canales en tiempo de ejecución para su servicio/cliente.

Básicamente, al escribir su canal de transporte personalizado, creará su propia clase TransportBindingElement derivada que puede usar en un enlace personalizado para usar su propio canal de transporte en lugar de uno predeterminado (como HttpTransport). Sin embargo, observe que un canal de transporte es, de todos modos, la parte inferior de la pila de canales (es decir, no hay nada debajo), por lo que no puede superponer HttpTransport a su transporte personalizado de todos modos (incluso si la limitación API no estaba allí) .

En otras palabras, si quiere hablar en HTTP, tendrá que preparar el material HTTP en la implementación de su canal personalizado. Sin embargo, nada le impide utilizar el resto de los enlaces http básicos/ws predeterminados en la parte superior de su propio canal, siempre que exponga las formas correctas del canal.

+0

muy buena publicación y enlaces! –

+1

arriba enlace no funciona. – vikky

Cuestiones relacionadas