none
Aumentar timeout Web part sin modificar web.config RRS feed

  • Pregunta

  • Buenos días,

    Tengo un webpart que hace muchos procesos y tarda mucho en ejecutarse así que necesito aumentar el timeout de ejecucion, eso si, sin modificar el archivo web.config, ya que no me es posible por temas de seguridad.

    Espero respuesta

    Muchas Gracias


    ManuelPa
    martes, 20 de septiembre de 2011 7:14

Respuestas

Todas las respuestas

  • Hola,

    Si tienes este problema, yo miraría de ejecutar las tareas de forma asíncrona.

    Un saludo


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    martes, 20 de septiembre de 2011 8:42
  • Y como puedo hacer esto? alguna ayuda?

    la tarea es recorrer una lista de documentos de sharepoint mediante una conexión SPSite, pero como hay cerca de 5000 pues tarda más de 2 min y da error de TimeOut

    Estoy bastante desesperado....

    Muchas Gracias!!!


    ManuelPa
    martes, 20 de septiembre de 2011 8:55
  • A parte de lo que comenta Juan Carlos, yo revisaría el proceso. ¿tarda mucho? ¿es normal que tarde? Piensa que es una web y que el usuario va a terminar por cerrar, darle atrás en el navegador o a actualizar varias veces, porque no encuentra respuesta a su acción.

     


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server
    martes, 20 de septiembre de 2011 8:56
  • si que es normal que tarde, porque como he comentado tengo que modificar hasta 5000 documentos, solo habrá un usuario que consulte este página y será consciente que tardará en cargar, por lo tanto el problema de que el usuario sea impaciente y cause algun error no existe.

    La manera asincrona en que consiste? en añadir una barra de progreso al eventhandler? eso es muy complicado de añadir?

    Necesito una solución fácil y rápida ya que voy con bastante retraso en este proyecto :(

    Muchas Gracias por todo


    ManuelPa
    martes, 20 de septiembre de 2011 9:16
  • Hola ManuelPa,

    lo que comenta Juan Carlos es que utilices Ajax para ejecutar el proceso, podrías hacerlo perfectamente con un UpdatePanel de ASP.NET.

    Yo viendo la cantidad de proceso, desarrollaría un Timer Job de SharePoint que se ejecutaría manualmente cuando el usuario lo pida y que se procese en background.

     


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server
    martes, 20 de septiembre de 2011 9:34
  • Y esto que comentas del Timer Job que es? Seria algo como el SPLongOperation?


    ManuelPa
    martes, 20 de septiembre de 2011 9:42
  • No, un Timer Job es un proceso definido en SharePoint y que se ejecuta en una cola en Background http://dotnetfinder.wordpress.com/2010/07/24/creatingcustomsharepointtimerjob2010/

    SPLongOperation es un modo de ofrecerle al usuario una página de espera mientras ejecutas el proceso asíncrono. Podría servirte para lo que necesitas.

     


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server
    martes, 20 de septiembre de 2011 9:45
  • El SpLongOperation no me funciona ya que como el sitio Sharepoint tiene un Timeout de 2min si el proceso dura más de ese tiempo me da error la página de espera.

    En cuanto al TimerJob por lo que he visto es un proceso que se ejecuta cada X tiempo y lo que busco es que cuando pulse un botón se ejecute el proceso en ese momento.

    Explico más detallado la web part por si ayuda: Es un web part que tiene un campo de texto en el que introduces un nombre, busca en todos los elementos de una lista ese nombre y a cada elemento que tenga ese nombre le modifica un campo. Una vez acabado el proceso se devuelve un mensaje conforme se han modificado X documentos correctamente, por lo tanto tampoco me interesa que se ejecute el proceso en segunda plano sin avisar de cuando ha acabado.

    Este proceso va alrededor de los 5-10 min y el Timeout del sharepoint está establecido en 2.

    Alguna ayudita más por favor?

    Gracias, entre todos sacaramos la respuesta :)


    ManuelPa
    martes, 20 de septiembre de 2011 11:04
  • Hola,

    Cuando hablaba de ejecución asíncrona no me refería exactamente a AJAX, que también es una opción clara para el caso que planteas... .NET te permite realizar operaciones de forma asíncrona de forma que el usuario pueda seguir haciendo otras cosas sin necesidad de esperar a que la aplicación acabe...este modelo es el que usa Silverlight por ejemplo. Como idea de por dónde deberías mirar te paso el siguiente enlace: http://underthehood.ironworks.com/2010/09/how-to-load-a-sharepoint-web-part-asynchronously.html

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    martes, 20 de septiembre de 2011 14:14
  • Llevo todo el día de ayer, media noche y hoy intentando con las web parts asincronas y no consigo nada, alguna ayuda extra por favor?

    No se puede modificar el timeout de una página en concreto y ya está?

    o no podria ir mirando la lista por trozos de 300 e ir cargando a cada trozo hecho una página con una barra que indicará el %?


    ManuelPa
    miércoles, 21 de septiembre de 2011 8:25
  • Acabo de descubrir cuál es el problema y es que voy haciendo un fila.update(); cada vez que cambio un registro y eso hace que se me alargue y me de el erro de timeout.. hay alguna forma de hacer el update de un solo campo o hacer un update de la lista en general con todas las modificaciones??

    Muchas Gracias!!!


    ManuelPa
    miércoles, 21 de septiembre de 2011 8:55
  • Hola ManuelPa,

    debería de utilizar el Batch Update. Es un método para hacer update masivos. Mira un ejemplo:

    http://blog.dynatrace.com/2009/01/20/sharepoint-using-batch-updates-to-speed-up-performance/

     


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server
    • Propuesto como respuesta Uriel Almendra martes, 9 de abril de 2013 17:14
    • Marcado como respuesta Uriel Almendra martes, 9 de abril de 2013 17:14
    miércoles, 21 de septiembre de 2011 11:10
  • Hola Alberto!!!

    ahora le estaba dando un vistazo a esa idea, pero no acabo de entender como aplicarla :S

    mi código de modificación es el siguiente:

    fila[

    "Responsable"] = fila["Responsable"].ToString().Replace(nombre_antiguo, nombre_nuevo);

    fila.Update();

    me puedes ayudar un poquito más?? noto que estoy cerca pero no acabo de verlo

    Muchísimas gracias por todo!!!


    ManuelPa
    miércoles, 21 de septiembre de 2011 11:24
  • Hola,

    Otro recurso más al respecto: http://snahta.blogspot.com/2008/11/batch-update-list-items-using-caml.html

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    miércoles, 21 de septiembre de 2011 11:37