Ahhhhhhhhhhhh, es como dice Carlos, entendi cualquiera. Para hacerlo seriamente lo haria con cola de mensajes, una agente que recorra la cola y resuelva, despues ese agente pude dejar algo una bd ocomo quieran para ques entere el servicio, pero eso ya es anecdotico.
Daniel Calvin El día 6/12/07, Marcelo P <[EMAIL PROTECTED]> escribió: > > Bueno muchacos, no se como agradecer tanta procupación en el tema!! > Voy a tratar de explicar el negocio a ver si así queda mas claro > Hay negocios que deben validar ciertos datos de los clientes antes de > poder realizar una operación, para eso su sistema en algún momento consume > un WS mio, esto quiere decir que en el mismo momento tengo a n personas > conectadas simultaneamente para pedir digamos "autorización". > El tema es que esto está resuelto en la actualidad yo poniendo un módulo > mío en cada cliente, que llama asincronicamente al ws ( por ende ya se como > consumir asincronicamente un ws desde el cliente), el WS deja al pedido en > el filesystem y vuelve al cliente con un número, y luego vuelve varias veces > a preguntar si está el resultado, hasta que se lo lleva. > El tema que eso lo resuelvo con mi módulo. > Ahora surgió la situación que hay clientes que no quieren módulos de > terceros en sus sistemas por ende, ellos quieren consumir directamente mi > WS, por ende , mandan un mensaje y esperan la respuesta, pero como pueden > ser muchos, no se si no se va a colgar el IIS, abriendo un thread por cada > pedido, ya que va a empezar a encolar y por ende todo puede morir por TO. > Es por eso que pensé que la solucion podía ser asincronismo, pero en el WS > no en el cliente. > La verdad no se como se resuelve esto en otros lados. > Espero que con esto quede mas claro. > Saludos a todos > > > *Oscar Zárate <[EMAIL PROTECTED]>* escribió: > > Marcelo ... estoy un poco perdido. Voy a citar tus mails anteriores: > > 1.- Subject del mensaje: Web service asincronico > 2.- De este ultimo mail: no se como hacer que el web service se comporte > de forma asincrónica > 3.- De un mail anterior: El tema es que la gente que lo va a consumir no > pude seguir con su operación hasta la respuesta de mi WS, asi que por eso no > lo harían asincronico. > > Que es lo que queres hacer? No estaras usando en forma erronea la palabra > "asincronico"? Podes explicar un poco mejor el negocio (aunque sea cambiando > los objetos reales por algo que se le parezca asi no tenes que revelar > ningun secreto)? > > Yo me perdi. > > SaludOZ, > > > On 12/6/07, Marcelo P <[EMAIL PROTECTED]> wrote: > > > > Pero justamente ese es el problema, no se como hacer que el web service > > se comporte de forma asincrónica. > > Saludos > > > > *"Pablo A. Allois" <[EMAIL PROTECTED]>* escribió: > > > > Probalo, personalmente opino que el IIS tiene que responderte bien. > > > > Hacete una aplicacion que tire 400 requests al webservice funcionando en > > forma asincrona. > > En el performance counter medile: > > Al server > > - Memoria > > - Cpu > > - Paging File > > Al proceso w3wp.exe > > - Memoria > > - Cpu > > - Threads > > > > Objeto ASP.NET <http://asp.net/> > > - Requests current > > - Requests queued - asegurate que este contador se mantenga en > > cero > > > > Hay mucho mas para moniteorear el server, pero este es un buen > > principio. > > > > Y podes tener otros cuellos de botella, como el SQL Server y proceso que > > se encarga de parsear el mensaje. > > > > > > Saludos! > > > > > > > > > > ------------------------------ > > *De:* [email protected] [mailto: [EMAIL PROTECTED] *En nombre de *Marcelo > > P > > *Enviado el:* Miércoles, 05 de Diciembre de 2007 12:19 p.m. > > *Para:* [email protected] > > *Asunto:* [puntonet] Web service asincronico ? > > > > > > Buenas > > Repondo sobre esta respuesta , ya que es la que termino de entender > > mejor > > La idea es mi ws atiende un pedido, ese pedido a su vez llama a un > > proceso que se encarga de parsera el mensaje , ponerlo en un cola y empezar > > a buscar la respuesta , que puede demorar a lo sumo 3 segundo, por último > > insertar un registro en un BD y luego parsear la respuesta para que sea > > enviada al que requirio. > > Todo esto no tarda mas de 5 a 7 segundos en la actualidad , pero ahora > > voy a tener muchos requirimientos en determinados horarios ( no se si mas de > > 100 concurrentes pero por ahí ). > > El tema es que la gente que lo va a consumir no pude seguir con su > > operación hasta la respuesta de mi WS, asi que por eso no lo harían > > asincronico. > > Al final yo lo que quiero es que no se cuelge el IIS, pero por lo que > > dicen el que debería relover el tema de hilos es el IIS y el ws se > > comportaría como uno WS simple y sincrónico. > > Desde yá, muchas gracias a todos. > > Saludos > > > > *"Pablo A. Allois" <[EMAIL PROTECTED]>* escribió: > > > > Hola Marcelo, > > > > Tenes un estimado de cuanto va a demorar en promedio la ejecucion de > > cada request ? > > > > El IIS puede soportar 100 pedidos concurrentes, si no fuera asi, yo > > estaria escribiendo en una lista de Apache y www.microsoft.com estaria > > sobre tomcat. > > > > Pero te recomendaria que te asesores sobre el tunning del IIS, puede > > ser un poco mas complejo que aumentar los hilos en un .config ... tambien > > deberias hacerle un monitoreo para asegurarte que no encole requests. > > > > En cuanto a asincrono o no ... me parece que lo mas simple es el > > webservice sincronico y que los clientes lo ejecuten como mas les guste. > > Para hacer un webservice que ejecute en forma asincrona, deberias tener > > alguna razon que te lo justifique ... y mejor razon que 100 requests > > concurrentes. > > > > > > Saludos! > > > > > > ------------------------------ > > *De:* [email protected] [mailto: [EMAIL PROTECTED] *En nombre de *Marcelo > > P > > *Enviado el:* Martes, 04 de Diciembre de 2007 04:49 p.m. > > *Para:* [email protected] > > *Asunto:* [puntonet] Web service asincronico ? > > > > > > 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ó: > > > > 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 <http://asp.net/> estan preparados para atender muchas > > peticiones pero con la condicion de que sean de ejecucion breve, muy breve. > > ASP.NET <http://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<http://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 <http://asp.net/>, > > la escalabilidad es limitada tambien (no por el limite de threads de > > ASP.NET <http://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/ > > > > > > ------------------------------ > > > > Tarjeta de crédito Yahoo! de Banco Supervielle. Solicitá tu nueva > > Tarjeta de crédito. De tu PC directo a tu casa. > > Visitá www.tuprimeratarjeta.com.ar > > > > > > ------------------------------ > > > > Tarjeta de crédito Yahoo! de Banco Supervielle. Solicitá tu nueva > > Tarjeta de crédito. De tu PC directo a tu casa. > > Visitá www.tuprimeratarjeta.com.ar > > > > > ------------------------------ > > Tarjeta de crédito Yahoo! de Banco Supervielle. Solicitá tu nueva Tarjeta > de crédito. De tu PC directo a tu casa. > Visitá www.tuprimeratarjeta.com.ar > > -- Daniel A. Calvin Cooperator Team Member http://www.cooperator.com.ar Microsoft Certified Professional
