none
Configuracion IIS RRS feed

  • Pregunta

  • Buenas Tardes.

    Antes de nada gracias.

    Estoy teniendo unos problemas con el iis, aunque la verdad no se si son de iis o de configuración en el web.config.

    El problema es el siguiente, tengo una pagina .aspx donde muestro un listado de productos, el precio al cargar la pagina no es visible, ya que cada cliente puede tener una serie de tarifas y descuentos muy muy complejos y podría retrasar la carga de la pagina.

    Al cargar la pagina, cada producto tiene un gif en la zona del precio indicando que se esta cargando, y asincronamente se llama por ajax pasando una lista de codigos de producto a un webmethod que calcula el precio para todos los productos.

    En este webmethod se ejecuta una tarea con Parrallel  para calcular los precios, el problema es que si otro usuario intenta cargar otra pagina, el iis no devuelve la petición hasta que el calculo de precios ha terminado.

    Pensando que el problema era el código que calcula los precios comente esa linea y añadi un Thread.Sleep(5000000); y mientras se ejecuta el webmethod en el sleep el iis no devuelve peticiones a otros usuarios. Lo cual es muy Raro.

    Me vendría bien un poco de ayuda.


    • Editado Jose MG martes, 19 de mayo de 2015 16:53 Error en explicacion
    martes, 19 de mayo de 2015 16:51

Respuestas

  • Vale he conseguido que si llamo desde dos navegadores diferentes no se atasque el iis, ahora me pasa que si estoy en una pagina y hago una llamada por ajax a un Webmethod de otra, si antes de que finalice intento cargar otra pagina diferente no se abre hasta que termine la llamada ajax.

    :( 

    Seguiré probando. voy a marcar como resuelto.

    • Marcado como respuesta Jose MG miércoles, 20 de mayo de 2015 12:08
    miércoles, 20 de mayo de 2015 12:07

Todas las respuestas

  • el IIS tiene un threadpool de 256 hilos. Mi pregunta es si sobrepasas ese limite

    http://blogs.msdn.com/b/tmarq/archive/2010/04/14/performing-asynchronous-work-or-tasks-in-asp-net-applications.aspx


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    martes, 19 de mayo de 2015 17:05
    Moderador
  • No se sobrepasa, las pruebas en local, llamo a un metodo y en otra ventana intento abrir el Index y no se abre el index hasta que no termina el proceso de calcular precios.

    Muchas gracias por el interes.

    martes, 19 de mayo de 2015 17:10
  • como tienes configurado el App pool de tu aplicación? Puedes subir una imagen?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 19 de mayo de 2015 17:13
    Moderador
  • como realizas las consultas a la bbdd? Puede que estes bloqueando tablas y eso hava que el servidor se "bloquee"

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 19 de mayo de 2015 17:17
    Moderador
  • hola

    >>Pensando que el problema era el código que calcula los precios comente esa linea y añadi un Thread.Sleep(5000000);

    no deberias usar el Thread ya que este podria estar aplicando sobre los procesos que genera el pool de iis

    por otro lado el webmethod recuerda que ejecuta sobre un thread que define el sitio web

    podrias hacer una incocacion asincrina del servicio, no se si lo estas realizando?

    dentro del Parallel estas realizando un proceso muy costoso en tema de procesmaiento ? lo pregunto porque esto podria bloquear los core del procesador y no dejar margen para que otro request sea atendido

    cuando lanzas el proceso si analizas el task manger como notas se comporta el procesador

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 19 de mayo de 2015 18:09
  • Hola de nuevo, el proceso no es costoso y no consume muchos recursos, solo es lento, pero como he dicho lo he comentado para hacer pruebas, imaginad que en el Whebmethod hay un bucle que tarde 4 segundos, el problema es que si otro usuario hace una petición al servidor, a otra pagina diferente esta no se resuelve hasta que termina el bucle y eso no debería ser así, creo que es configuración del iis pero no se configurarlo.

    El thread lo he puesto para que no termine y probar a llamar a otra pagina diferente.

    Muchas gracias a todos.

    No he encontrado solución, cerrare el hilo cuando la encuentre 


    • Editado Jose MG martes, 19 de mayo de 2015 20:45
    martes, 19 de mayo de 2015 20:45
  • si el proceso es lento entonces es problema del acceso a datos. Me parece raro que lanzando n asincrono se bloquee el hilo,principal. Puedes mostrarnos como realizas tu proceso paralelo?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 19 de mayo de 2015 20:48
    Moderador
  • Hola Sergio, el problema no es el acceso a datos porque los datos están cacheados en memoria del servidor.

    He hecho una prueba poniendo un simpre "for" contando hasta mucho y el servidor no responde abriendo otra pagina.

    Como digo es raro. Aqui pongo capturas de la configuración.

    martes, 19 de mayo de 2015 21:02
  • >>El thread lo he puesto para que no termine y probar a llamar a otra pagina diferente.

    cuando dices que se solicita otra pagina esta no invoca al servicio web ?

    poque entiendo que las paginas web estan en un sitio diferente al web service, no ?

    o sea son sitios separados con puertos separados y en distintos Application Pool ?

    si usan el mismo application pool podria ser el problema, prueba de definir uno diferente para cada sitio

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 19 de mayo de 2015 21:04
  • El webservice esta en el mismo proyecto, probare lo que has dicho mañana

    Muchas gracias


    • Editado Jose MG martes, 19 de mayo de 2015 21:17
    martes, 19 de mayo de 2015 21:17
  • Nada, sigue igual.

    Tengo que decir que la aplicación es WebForm, he realizado una prueba, he creado una pagina .aspx y en el Page_Load he puesto un bucle muy grande, no llama en ningún sitio a bases de datos, y sigue haciendo lo mismo, cuando llamo a otra pagina el servidor no responde hasta que termina el bucle en la primera, ¡No es multihilo, madre mía xD!, tiene que ser de configuración porque en un proyecto vacío nuevo hago la misma prueba y funciona perfectamente.

    Saludos

    miércoles, 20 de mayo de 2015 9:02
  • No me queda claro una cosa que dices...

    el Page_Load he puesto un bucle muy grande, no llama en ningún sitio a bases de datos, y sigue haciendo lo mismo, cuando llamo a otra pagina el servidor no responde hasta que termina el bucle en la primera

    Estás ejecutando el bucle y desde otra sesión (ejecuta otro browser) tienes respuesta?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 20 de mayo de 2015 9:13
    Moderador
  • No no hay respuesta.

    Es como si dijese "ssss espera que estoy haciendo algo grande"  y no procesa mas peticiones.

    Saludos


    • Editado Jose MG miércoles, 20 de mayo de 2015 9:35
    miércoles, 20 de mayo de 2015 9:33
  • Hiciste lo que te comentó Leandro??

    Cambia el app pool de tu aplicativo. Yo como norma general no uso El DefuaultAppPool. Me creo uno propio para mi sitio web y otro para los servicios WCF hospedados


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 20 de mayo de 2015 9:35
    Moderador
  • No lo he probado, pero como digo el problema no es ese, 

    Imagina que llamas a una pagina buscar_productos.aspx que el Page_Load suma hasta 999999999 y que otro usuario llama al defaul.aspx, al usuario que llama a default no se le abre la pagina hasta que el otro no termina la suma.

    miércoles, 20 de mayo de 2015 9:57
  • Vale he conseguido que si llamo desde dos navegadores diferentes no se atasque el iis, ahora me pasa que si estoy en una pagina y hago una llamada por ajax a un Webmethod de otra, si antes de que finalice intento cargar otra pagina diferente no se abre hasta que termine la llamada ajax.

    :( 

    Seguiré probando. voy a marcar como resuelto.

    • Marcado como respuesta Jose MG miércoles, 20 de mayo de 2015 12:08
    miércoles, 20 de mayo de 2015 12:07