Ayuda sobre Servicios Web

07/04/2008 - 15:55 por Juan Diego Bueno | Informe spam
Buenas gente:

Estoy inmerso en un proyecto de aplicación distribuida, la cual consta
de un servidor central con una BD central, y una serie de bases de
datos distribuidas en cada uno de los nodos.

La idea, como cabría de esperar, es montar un sistema de réplica
controlado entre el servidor central y los nodos. Se trata de poder
enviar y recibir datos de central a nodo y de nodo a central. Mi
primera idea, básicamente por mis conocimientos actuales, es usar
WebServices. En principio, no tengo mayor problema para hacer lo que
hago, pero me preocupa una cuestión: El WS envía archivos XML con los
registros y el esquema de documento por cada tabla que importo o
exporto. El tema es que estos nodos están en movimiento y en algún
momento han de tener que conectarse vía satélite o móvil. En estos
casos, se suele facturar por la tasa de transferencia de datos y por
ello es necesario que estos sean lo menor posible. Y he aquí mi duda:

¿Puedo de alguna manera comprimir o minimizar este envío y recepción de
datos con WS/XML?
¿Debo pensar en alguna otra posibilidad que me garantice que los datos
que se envían son mímimos? Y de ser así ¿qué más opciones tengo?

Gracias de antemano. Un saludo

http://www.moondance.tk

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
07/04/2008 - 16:41 | Informe spam
Hola Juan Diego,

On Mon, 07 Apr 2008 15:55:56 +0200, Juan Diego Bueno
wrote:

Estoy inmerso en un proyecto de aplicación distribuida, la cual consta
de un servidor central con una BD central, y una serie de bases de
datos distribuidas en cada uno de los nodos.

La idea, como cabría de esperar, es montar un sistema de réplica
controlado entre el servidor central y los nodos. Se trata de poder
enviar y recibir datos de central a nodo y de nodo a central. Mi
primera idea, básicamente por mis conocimientos actuales, es usar
WebServices.



Espero que la segunda idea y las sucesivas sean mejores :-)

¿Puedo de alguna manera comprimir o minimizar este envío y recepción de
datos con WS/XML?



Si, por supuesto. Puedes usar System.IO.Compression, por ejemplo.

Si mantienes los "Streams" abiertos todo el rato la compresión será
mucho más eficiente.

¿Debo pensar en alguna otra posibilidad que me garantice que los datos
que se envían son mímimos? Y de ser así ¿qué más opciones tengo?



Tienes la opción de usar TCP/IP y crear un formato de transmisión de
datos que sea eficiente.


Saludos
Alfredo
Respuesta Responder a este mensaje
#2 Juan Diego Bueno
07/04/2008 - 17:07 | Informe spam
Hola Alfredo:

On 7 abr, 16:41, Alfredo Novoa wrote:
>¿Puedo de alguna manera comprimir o minimizar este envío y recepción de
>datos con WS/XML?

Si, por supuesto. Puedes usar System.IO.Compression, por ejemplo.

Si mantienes los "Streams" abiertos todo el rato la compresión será
mucho más eficiente.



Gracias, echaré un ojo a ver si lo voy pillando.

>¿Debo pensar en alguna otra posibilidad que me garantice que los datos
>que se envían son mímimos? Y de ser así ¿qué más opciones tengo?

Tienes la opción de usar TCP/IP y crear un formato de transmisión de
datos que sea eficiente.



No sé por qué intuía que en algún momento me ibas a plantear algo así.
Para esta opción tengo dos trabas: Una, que apenas conozco sockets y
tendría que dedicar un tiempo a mirarlo (que es con lo que presupongo
se haría), y otra, que no tengo ni idea de como crear un formato
mínimamente decente para eso y también me llevaría tiempo.

Me gustaría poder usar los datatables y datasets como clases que
conozco, de ahí que haya optado por esa primera idea que ya veo que no
te gusta un pelo.

En otro foro me han planteado la posibilidad de usar JSON, que la
verdad que no tiene ni de lejos tanta morralla como XML, podría ser
una idea.

También me habían propuesto Remoting, pero me encuentro en las mismas
que con TCP/IP

Lo que me sorprende es que no me hayas planteado como posibilidad los
sistemas de réplica de SQL Server, los cuales no he desechado del
todo, pero al igual que en las anteriores opciones, me requiere un
estudio del sistema y no tengo muy claro que las directivas de
seguridad de la empresa me permitan "exponer" el servidor central.
Además la réplica va a ser lanzada por una aplicación cliente, ya que
no se dispone de conexión constantemente.

Voy a ir poniendo propuestas en una balanza e ir estimando el coste en
tiempo de cada implementación.

Muchas gracias
Respuesta Responder a este mensaje
#3 Alfredo Novoa
07/04/2008 - 17:31 | Informe spam
Hola Juan Diego,

On Mon, 7 Apr 2008 08:07:32 -0700 (PDT), Juan Diego Bueno
wrote:

Si, por supuesto. Puedes usar System.IO.Compression, por ejemplo.



Si mantienes los "Streams" abiertos todo el rato la compresión será
mucho más eficiente.



Gracias, echaré un ojo a ver si lo voy pillando.



Bueno, espero que sea cierto por que nunca lo he probado. Lo que si he
usado es la vieja biblioteca ZLib que era muy parecida y las
diferencias de compresión si mantenías abiertos los "streams" eran
espectaculares en comunicaciones cortas.

No sé por qué intuía que en algún momento me ibas a plantear algo así.
Para esta opción tengo dos trabas: Una, que apenas conozco sockets y
tendría que dedicar un tiempo a mirarlo (que es con lo que presupongo
se haría),



Es muy fácil y lo tienes prácticamente ya hecho en los ejemplos de la
MSDN.

y otra, que no tengo ni idea de como crear un formato
mínimamente decente para eso y también me llevaría tiempo.



Pues esto está tirado.

¿Usas tipos de datos especiales?

Por que sino es una chorrada: un string lo mandas tal cual, un byte es
un byte, un int son 4 bytes, etc, etc :-)

Y mandas las tablas en forma de tabla, no como XML que las manda en
forma de árbol.

En otro foro me han planteado la posibilidad de usar JSON, que la
verdad que no tiene ni de lejos tanta morralla como XML, podría ser
una idea.



Si usas tipos de datos muy complejos y no quieres currar mucho ni
quieres mucha eficiencia te puede servir, pero si sobre todo mandas
cadenas, fechas y números no tiene mucho sentido. Lo mandas todo en
binario y listo.

También me habían propuesto Remoting, pero me encuentro en las mismas
que con TCP/IP



Esto tampoco es nada eficiente.

Lo que me sorprende es que no me hayas planteado como posibilidad los
sistemas de réplica de SQL Server, los cuales no he desechado del
todo, pero al igual que en las anteriores opciones, me requiere un
estudio del sistema y no tengo muy claro que las directivas de
seguridad de la empresa me permitan "exponer" el servidor central.
Además la réplica va a ser lanzada por una aplicación cliente, ya que
no se dispone de conexión constantemente.



Es que esto tampoco lo conozco en profundidad, pero viniendo de donde
viene me extrañaría muchísimo que fuese fácil de usar y eficiente.


Saludos
Alfredo
Respuesta Responder a este mensaje
#4 Jesús López
07/04/2008 - 18:03 | Informe spam
Pues yo veo muchas alternativas:

1) Replicación nativa de SQL Server. Podrías usar replicación de mezcla y
configurar la replicación para usar sincronización por HTTPS. Así no se
expone el servidor de base de datos a internet, sino un servidor web.

2) Usar Microsoft Synchonization Services:
http://msdn2.microsoft.com/en-us/sync/default.aspx

Esto está todavía en fase CTP2, pero tiene buena pinta, aunque yo preferiría
la replicación nativa de SQL Server.

3) Montártelo tú mismo. Esto no te lo recomendaría porque requiere un
esfuerzo de desarrollo tremendo. Aquí tendrías varias opciones:
a) Usar WCF. Con WCF podrías tener serialización binaria. No hace falta
que te vayas a .NET Remoting
b) Usar Servicios Web ASP.NET. Esto está ya obsoleto, desde que ha
aparecido WCF
c) .NET Remoting. Más obsoleto aún que los servicios Web
e) Utilizar sockets. Esto sería la peor locura de todas cuando tienes
WCF que admite el protocolo TCP/IP.


Saludos:

Jesús López
www.solidq.com


"Juan Diego Bueno" escribió en el mensaje
news:
Buenas gente:

Estoy inmerso en un proyecto de aplicación distribuida, la cual consta de
un servidor central con una BD central, y una serie de bases de datos
distribuidas en cada uno de los nodos.

La idea, como cabría de esperar, es montar un sistema de réplica
controlado entre el servidor central y los nodos. Se trata de poder enviar
y recibir datos de central a nodo y de nodo a central. Mi primera idea,
básicamente por mis conocimientos actuales, es usar WebServices. En
principio, no tengo mayor problema para hacer lo que hago, pero me
preocupa una cuestión: El WS envía archivos XML con los registros y el
esquema de documento por cada tabla que importo o exporto. El tema es que
estos nodos están en movimiento y en algún momento han de tener que
conectarse vía satélite o móvil. En estos casos, se suele facturar por la
tasa de transferencia de datos y por ello es necesario que estos sean lo
menor posible. Y he aquí mi duda:

¿Puedo de alguna manera comprimir o minimizar este envío y recepción de
datos con WS/XML?
¿Debo pensar en alguna otra posibilidad que me garantice que los datos que
se envían son mímimos? Y de ser así ¿qué más opciones tengo?

Gracias de antemano. Un saludo

http://www.moondance.tk


Respuesta Responder a este mensaje
#5 Alfredo Novoa
07/04/2008 - 18:04 | Informe spam
On Mon, 07 Apr 2008 17:31:16 +0200, Alfredo Novoa
wrote:


Por que sino es una chorrada: un string lo mandas tal cual, un byte es
un byte, un int son 4 bytes, etc, etc :-)



Con un par de switch, un BinaryWriter y un BinaryReader lo haces con
la chorra :-)




Saludos
Alfredo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida