none
Delay en un Visual Web Part RRS feed

  • Pregunta

  • Buenas,

    Estoy desarrollando un visual webpart que obtiene los datos de un servicio web externo y los representa en varios campos. He notado que el rendimiento del webpart es muy pobre y la representación de la información tarda demasiado (en torno a 1-2 seg.).

    El mismo código, si lo paso a un proyecto de web de visual studio, genera correctamente la información y de manera inmediata, sin ningún tipo de delay.

    Sin embargo, en SharePoint Foundation 2010, al activar la developer dashboard veo que el evento OnPrerender del webpart tarda casi 2000ms en ejecutarse.

    ¿Os ha pasado algo similar?. ¿Es un problema de configuración?.

    Gracias!.


    Tomás González. Twitter://@tgmourino

    lunes, 29 de septiembre de 2014 10:34

Todas las respuestas

  • Hola,

    ¿qué controles estás utilizando en el Web Part? ¿estás en modo Release o en Debug?

    El rendimiento del Web Part debería de ser el mismo, si el código es el mismo, no tiene mucho sentido.


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server

    lunes, 29 de septiembre de 2014 10:49
  • Buenas, 

    Estoy utilizando asp:Label (en plan lo más básico) y está en modo Release.

    Yo tampoco lo entiendo muy bien, se supone que no debería afectar en el rendimiento, pero lo dicho, en un proyecto web va perfectamente y en SharePoint tarda, me imagino que es la ejecución de la consulta al servicio web, por eso preguntaba si es necesaria algún otro tipo de configuración.

    En principio lo que hago es añadir la referencia del servicio, crear el servicio, añadir las credenciales y ejecutar la consulta, así como modificar el web.config para que acepte las credenciales. La consulta la ejecuta correctamente pero tarda en exceso.


    Tomás González. Twitter://@tgmourino

    lunes, 29 de septiembre de 2014 10:57
  • ¿Estás leyendo la URL del servicio web de Web.Config de SharePoint?

    Yo empezaría por ese punto y ver si se la pones directa en el código reduces esos 2 segundos de carga.


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server

    lunes, 29 de septiembre de 2014 11:12
  • Sigue igual. 

    También probé a añadirlo como web reference y tarda lo mismo.


    Tomás González. Twitter://@tgmourino

    lunes, 29 de septiembre de 2014 11:32
  • Hola,

    Aparte de lo que te comenta Alberto:

    • Pasa a tu WSP un analizador de soluciones SP como MSOCAF o SPCAF para ver que análisis realiza de esa llamada al servicio web.
    • No creo que el problema esté en qué se esté leyendo la conexión al servicio desde el Web.Config, en cualquier caso si aí fuese, lo más rápido y limpio es que esta información esté en una Property Bag.

    Un saludo


    ------------------------------------------------------------
    Juan Carlos Gonzalez Martin
    MVP de SharePoint Server - Director revista CompartiMOSS:
    http://www.compartimoss.com
    Blog: http://geeks.ms/blogs/jcgonzalez
    Twitter: @jcgm1978
    ------------------------------------------------------------

    lunes, 29 de septiembre de 2014 11:39
  • Tomás, agrega tu código en secciones y monitorea esas secciones con la clase SPMonitoredScope, de esta manera sabrás en el método prerender donde está el problema. Ej:

     using (SPMonitoredScope monitoredScope = new SPMonitoredScope("Leyendo el web.config"))
      {
       
      }  
      using (SPMonitoredScope monitoredScope = new SPMonitoredScope("Buscando los datos al web services"))
      {
       
      }  
     También puedes crear SPMonitoredScope anidados, pero depende del uso. Después utiliza el developer dashboard para saber donde está el problema. Notaras una disminución de la performance usando este comando, pero es mínima. Saludos.
     

    lunes, 29 de septiembre de 2014 11:49
  • Ok, gracias Juan Carlos, probaré para ver donde está el problema y os cuento.

    Gracias a todos!


    Tomás González. Twitter://@tgmourino

    lunes, 29 de septiembre de 2014 11:56
      • Credenciales WS (0.06 ms)
      • LLamar WS (824.12 ms)
      • Guardar Var. y asig Nombre WS (0.05 ms)

      Está claro que donde tarda es a la hora de invocar al método del servicio web. Aquí el código tampoco tiene mucho más:

      resultado = temp.ZHR017_01_INF0002(data);

      la variable data es un string, y resultado es una clase donde se almacenan los valores devueltos.


    Tomás González. Twitter://@tgmourino

    lunes, 29 de septiembre de 2014 12:33
  • Ya tendrías que revisar el web services porque tarda tanto.

    Algunas cosas a revisar:

    • si es multithreading para soportar múltiples llamadas, y no esperar a que termine otra.
    • Si la autenticación del web services es lenta (problemas con tu AD)
    • Networking lento entre SharePoint y el server donde está el web services.
    • etc, etc. hay muchas variables.

    Pon el foco en el web services.

    Saludos.

    lunes, 29 de septiembre de 2014 14:11