2010-09-03 11 views
5

Estoy buscando crear un servicio WCF de consulta de datos a través de una conexión satelital lenta y realmente me gustan los Servicios de datos WCF. El problema que veo es que HTTP es un formato muy detallado y dado que todo lo que hago es interno y .NET, ¿es posible utilizar NetTcpBinding para reducir parte de la sobrecarga?¿Se pueden usar los servicios de datos WCF (ne OData, ne Astoria, ne ADO.NET Data Service) con NetTcpBinding?

¿Esto es posible? ¿Aconsejable?

Respuesta

3

No, los servicios de datos WCF están construidos sobre REST, y REST se basa muy íntima y completamente en los verbos HTTP como GET, PUT, POST etc. - no se pueden ejecutar a través de NetTcp, ya que están intrínsecamente vinculados a la pila del protocolo HTTP.

¿Quizás haya otras opciones para que usted reduzca los datos que se transmiten? Ajusta tus objetos, recorta la grasa, si puedes, tanto en el número de filas recuperadas a la vez como en el número de atributos/campos de datos transmitidos. Es probable que sea el enfoque más prometedor.

+0

Si bien es técnicamente posible crear un host personalizado, OData está demasiado vinculado a HTTP para que esto sea factible. Lástima ... tener un servicio OData con conexiones persistentes sería bueno. –

4

Mientras investigaba esto por mi cuenta, me encontré con el MSDN article on Self-Hosted WCF Data Services. Este artículo indica que puede alojar el servicio con DataServiceHost que aún requiere HTTP (se deriva de WebServiceHost).

Pero también puede hacer rodar su propio host usando IDataServiceHost. He aquí un extracto del artículo de MSDN:

Para los casos en que la aplicación WCF anfitrión es demasiado restrictiva, que También puede definir un host personalizado para un servicio de datos . Cualquier clase que implementa la interfaz IDataServiceHost se puede usar como el host de red para un servicio de datos . Un host personalizado debe implementa la interfaz IDataServiceHost y ser capaz de manejar los siguientes responsabilidades básicas de el anfitrión del servicio de datos:

  • prestar el servicio de datos con la ruta raíz de servicio.
  • Procesar la solicitud y la información de los encabezados de respuesta al apropiado La implementación del miembro IDataServiceHost.
  • Manejar excepciones planteadas por el servicio de datos.
  • Validar parámetros en la cadena de consulta.

El artículo parece sugerir que la EM ha segrated adecuadamente las responsabilidades del servicio de datos de las responsabilidades de interfaz de red. Si es así, entonces debería poder escribir un NetTcpDataServiceHost. ¿Alguien ha escrito alguna vez un IDataServerHost? ¿Alguna sugerencia?

+0

IDataServiceHost todavía requiere HTTP, ¿o no? –

+0

Tengo curiosidad Simon: ¿se te ocurrió una buena solución para proporcionar las funciones de consulta personalizables de WCF Data Services en una configuración WCF/TCP? –

+1

No en el buen sentido. Implementé un subconjunto del esquema OData URI que necesitaba para mi servicio y lo hice a través de net.tcp, pero no es realmente un servicio OData. Puede probar ODataLib en CodePlex ... esta es la implementación de código abierto de OData del núcleo de servicio de Microsoft.En algún momento, espero ver esto y ver qué se puede obtener, pero los cronogramas del proyecto avanzan rápidamente. Tú sabes cómo es. –

Cuestiones relacionadas