Exacto, el tema es que debo demorar el ws hasta que vuelva la respuesta. Esto 
lo intenté hace un tiempo hacienso un CurrentThread.sleep( n) y lo que me pasó 
es que cuando llega el segundo pedido me daba un error en el consumo del ws, 
por eso lo plantee desde el punto de vista de escribir en el filesystem ( lo 
hice así porque no sabía manejar / porogramar el sistema de colas ).
De todos modos, como dijo jack , vayamos por parte, primero voy a realizar unas 
pruebas con IIS, viendo como se comporta lo mas simple de armar y si así no 
funca, comenzaremos a complejizar la solución.
Un millon de gracias a todos y los mantengo informado acerca de mi avance.
Saludos

Carlos Peix <[EMAIL PROTECTED]> escribió:     Marcelo,
  
 En el  escenario que planteas no te queda otra opcion que demorar la ejecucion 
del  webservice hasta que el resultado este disponible. Si esto puede ser o no 
un  promblema depende de varios factores. Sugiero que sigas el consejo de 
Leonardo y  hagas pruebas de carga sobre el servicio real con distinta cantidad 
de clientes  para que veas cual es el limite.
  
 Carlos  Peix
 

       
---------------------------------
   From: puntonet@mug.org.ar    [mailto:[EMAIL PROTECTED] On Behalf Of Marcelo P
Sent:    Jueves, 06 de Diciembre de 2007 10:45 a.m.
To:    puntonet@mug.org.ar
Subject: [puntonet] Web service asincronico    ?


   
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
                 - 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: puntonet@mug.org.ar          [mailto:          [EMAIL PROTECTED] 
En nombre de Marcelo P
Enviado          el: Miércoles, 05 de Diciembre de 2007 12:19 p.m.
Para: puntonet@mug.org.ar
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: puntonet@mug.org.ar [mailto:            [EMAIL PROTECTED] En 
nombre de Marcelo P
Enviado            el: Martes, 04 de Diciembre de 2007 04:49 p.m.
Para: puntonet@mug.org.ar
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 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: puntonet@mug.org.ar [mailto:                [EMAIL 
PROTECTED] On Behalf Of Diego                Jancic
Sent: Lunes, 03 de Diciembre de 2007 08:16                p.m.
To: puntonet@mug.org.ar
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: puntonet@mug.org.ar [mailto: [EMAIL 
PROTECTED] On Behalf Of Oscar                Zárate
Sent: Lunes, 03 de Diciembre de 2007 07:28 p.m                .
To: puntonet@mug.org.ar
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: puntonet@mug.org.ar [mailto:                [EMAIL PROTECTED] On Behalf 
Of Leonardo
Micheloni                
Sent: Lunes, 03 de Diciembre de 2007 05:55 p.m.
To: puntonet@mug.org.ar
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

       
---------------------------------

Los referentes más importantes en compra/venta de autos se juntaron:
Demotores y Yahoo!.Ahora comprar o vender tu auto es más fácil. 
 Visitá http://ar.autos.yahoo.com/

Reply via email to