Bueno,ante todo gracias por las respuestas.
Les comento un poco mas
Las respuestas que debe dar el WS no pueden demorar mas de 5 o 7 segundo.
El tema de querer asincronismo en esto es que, a mi me pueden llegar 100
pedidos concurrentes y no creo que el IIS corriendo asp.net pueda trabajar con
tantos hilos a la vez asi como si nada, por eso es que yo quiro un
asincronismo, ya que pienso que eso es la solución, per la verdad no lo se.
Como les dije antes, la duda mia con el asincronismo, es que si yo llamo a un
proceso A de un web service, que ejecute algoi asincronicamente, cuanlo lo
llame, me va a devolver el control al flujo del WS, por ende va a terminar y se
va a ir de nuevo al cliente, sin que todavía este la respuesta, por ende nunca
se que hay una respuesta.
Espero haber sido claro, sino avisen y lo trato de expolicar mejor.
Saludos a todos
Carlos Peix <[EMAIL PROTECTED]> escribió: @font-face { font-family:
Wingdings; } @font-face { font-family: Cambria Math; } @font-face {
font-family: Calibri; } @font-face { font-family: Tahoma; } @page Section1
{size: 612.0pt 792.0pt; margin: 72.0pt 72.0pt 72.0pt 72.0pt; } P.MsoNormal {
FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman","serif" }
LI.MsoNormal { FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New
Roman","serif" } DIV.MsoNormal { FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt;
FONT-FAMILY: "Times New Roman","serif" } A:link { COLOR: blue;
TEXT-DECORATION: underline; mso-style-priority: 99 } SPAN.MsoHyperlink {
COLOR: blue; TEXT-DECORATION: underline; mso-style-priority: 99 } A:visited {
COLOR: purple; TEXT-DECORATION: underline; mso-style-priority: 99 }
SPAN.MsoHyperlinkFollowed { COLOR: purple; TEXT-DECORATION: underline;
mso-style-priority: 99 } SPAN.gmailquote { mso-style-name: gmail_quote }
SPAN.e {
mso-style-name: e } SPAN.EmailStyle19 { COLOR: #1f497d; FONT-FAMILY:
"Calibri","sans-serif"; mso-style-type: personal-reply } .MsoChpDefault {
mso-style-type: export-only } DIV.Section1 { page: Section1 } Hola
Diego,
La diferencia entre un WS que quede procesando y el cliente maneje el pedido
asincronico y lo que propone Oscar es "Escalabilidad". IIS y ASP.NET estan
preparados para atender muchas peticiones pero con la condicion de que sean de
ejecucion breve, muy breve. ASP.NET muere tempranamente si te demoras en
responder la solicitud, incluso es sorprendente que con unos pocos clientes
puedas tirarlo por el piso. Esto no es un error de diseño en ASP.NET, mas bien
es porque los diseñadores asumen algunos puntos de partida, uno de ellos es
que el request debe ser resuelto lo mas rapido posible.
El tema que plantea Marcelo tiene dos salidas, si el tiene requests que
impliquen no tiene mas de 10 o 15 requests concurrentes (por ejemplo, si el
request tarda 1 segundo y tiene 100 clientes que se comunican cada 10
segundos, tiene un promedio de 10 clientes concurrentes), entonces puede
intentar ver si funciona con la solucion simple (sincronico o blocking del
lado del server y asincronico del lado del cliente). Si, en cambio, necesita
mas capacidad, probablemente necesite algo como lo que propone Oscar.
La solucion que vos mencionas se acerca a la que propuso nuestro amigo rapado
(Oscar) pero adolece de algunos riesgos para mi gusto: no me gusta mucho
hostear worker threads en el proceso de ASP.NET, la escalabilidad es limitada
tambien (no por el limite de threads de ASP.NET sino por la capacidad de
proceso del server). Siembre es bueno que un web server tenga mucho procesador
disponible.
La solucion basada en MQ para el request y uno o mas procesadores en paralelo
es buena. Queda resolver la vuelta de la respuesta. Algunos utilizar MQ
tambien para la vuelta pero a mi no me gusta, prefiero volver por una base de
datos SQLServer para tomar el mensaje por ID en lugar de escanear toda la cola
de vuelta para buscar el mensaje (hasta donde se, MQ no tiene una operacion
eficiente para tomar un mensaje por ID). Igual, esto seria importante solo en
casos de muy alto caudal.
Abrazo
Carlos Peix
---------------------------------
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Diego
Jancic
Sent: Lunes, 03 de Diciembre de 2007 08:16 p.m.
To: [email protected]
Subject: [puntonet] Web service asincronico ?
Hola Oscar,
Pero entre enseñarle al programador a manejar ese WS con todos esos
métodos y enseñarle a hacer la llamada asincrónica (si es que no la sabe),
no es mas fácil la 2da?
Yo justo ahora estoy haciendo algo como lo que decis, envio pedidos (via
MSMQ) y hay N threads (prefijados por configuración) que procesan todas las
tareas
pero eso es por motivos muy particulares y (si esta todo dentro de
IIS) la carga no cambia en nada
Si usas un WS, o una pagina web IIS ya te
da la funcionalidad de tener multiples threads, una cola de mensajes en
espera, etc
No es que quiera parecer muy negativo, pero me no lo veo eh.. J
Salu2!
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Oscar
Zárate
Sent: Lunes, 03 de Diciembre de 2007 07:28 p.m.
To: [email protected]
Subject: [puntonet] Web service asincronico ?
Agrego algo mas.
El metodo IniciarTarea podría estar escribiendo los parametros de la
consulta en una Queue y del otro lado de la Queue podría haber N servidores
leyendo la Queue y tomando el requerimiento de la consulta (haciendo la
consulta y escribiendo en la table de resultados).
Me gusta la idea ... me parece que me fui de mambo, pero me gusta.
SaludOZ,
PS: No creo ser muy original con esto, ya debe estar implementado mil
veces y seguro seguro seguro ... hay un patron con nombre para resolver esto.
On 12/4/07, Oscar Zárate <[EMAIL PROTECTED]> wrote:
Yo creo que la idea sería escribir algo que responda "inmediatamente"
o responda ... "preguntame luego con este ticket.
No se cual es el negocio, pero me imagino algo que tenga mucho tiempo
de procesamiento ... entonces el web service tiene un metodo iniciar tarea
(no el proxy, el web service) este metodo inmediatamente retorna un ticket y
dispara un proceso y cuando finaliza el proceso guarda el resultado completo
en una tabla con ID igual al numero de ticket. Luego, otro metodo que recibe
el ticket y devuelve "resultado" o "preguntame luego". Este segundo metodo,
busca en la tabla si existe algun resultado para ese ticket, si existe
retorna el resultado, sino retorna "preguntame luego".
Incluso la respuesta del proceso deberia ser formateada para que el
metodo que devuelve sea lo mas rapido posible (solo lee y retorna, no pierde
tiempo en ningun formateo).
De este modo, haces un "servicio" (sea web o no) que es "asincronico".
Incluso en el caso de una consulta MUY RAPIDA, la consulta completa consta
igual de una llamada a dos metodos.
Espero haber sido claro, creo que de ese modo solucionas el problema.
SaludOZ,
On 12/4/07, Diego Jancic <[EMAIL PROTECTED]> wrote:
Hola,
Lo que no vas a poder hacer es que sea asincrónico desde el punto de vista
del cliente. El cliente (desarrollado por cualquier otra persona) se
conecta, recibe una respuesta y ya esta, no podes hacer nada mas.
Lo que podrías hacer es trabajar dentro del web service para que no funcione
dentro de un thread de IIS, y asi sobrecargas menos al IIS.
Cuando decis "o que se comporte de alguna manera de atender muchas
peticiones", no se bien a que te referis. Los WS están preparados para
recibir muchas peticiones, y si al usuario final le molesta que tarde tanto
(imaginemos que realiza un proceso largo, pero no se está sobre cargando el
servidor del WS), es trabajo del que arma el cliente hacer que le aparezca
un hermoso "loading..."
Posiblemente la solución sea escribir un help para enseñarle a los otros
desarrolladores a hacer las cosas asincrónicas :)
Saludos!
-----Original Message-----
From: [email protected] [mailto: [EMAIL PROTECTED] On Behalf Of Leonardo
Micheloni
Sent: Lunes, 03 de Diciembre de 2007 05:55 p.m.
To: [email protected]
Subject: [puntonet] Web service asincronico ?
Entonces no te puedo ayudar, no tengo idea
On Dec 3, 2007 3:15 PM, Marcelo P < [EMAIL PROTECTED]> wrote:
> Gracias por la respuesta
> El tema es que yo tengo que desarrollar un web service para que sea
> consumido por cualquiera, yo no programo ni armo el proxy. Lo que tengo
que
> hacer es que el web service sea asyncronico o que se comporte de alguna
> manera de atender muchas peticiones.
> Saludos
>
__________ Información de NOD32, revisión 2699 (20071203) __________
Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com
---------------------------------
Compartí video en la ventana de tus mensajes y también tus fotos de Flickr.
Usáel Nuevo Yahoo! Messenger versión Beta.
Visitá http://ar.beta.messenger.yahoo.com/