none
DLL y compilación dinámica RRS feed

  • Pregunta

  • Hola,

    Tengo un sitio web con muchas visitas que tengo que actualizar con cierta frecuencia, por lo cual uso compilación dinámica. Recientemente he tenido que incorporar una librería de clases a la solución (una DLL). Esta DLL queda en el BIN de mi sitio web, de manera que cuando subo la nueva versión al servidor IIS (mediante copy/paste de FTP), esta subida de la dll produce que se pierdan todas las sesiones del servidor y a los usuarios se les generen errores y se bloquee su ritmo de trabajo con la web.

    ¿Sabéis si una dll referenciada puede ser actualizada de forma dinámica como puede hacerse por ejemplo con un fichero .cs de un aspx?

    Gracias


    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    jueves, 28 de octubre de 2010 14:50

Respuestas

  • Hola Jesús Bosch Medallas del usuario Medallas del usuario Medallas del usuario Medallas del usuario

    TEMA 1: Cambios en BIN sin compilar todo el sitio (sin reinciar)

    Si solamente quieres que no se reinicie todo el sitio puedes probar el atributo optimizeCompilations  de la seccion compilation del web.config

    Cuando haces cambiosen archivos de n ivel superior (global.asax, App_Code, o BIN) se compila todo el sitio, eso ya lo sabemos.
    Textual de MSDN:
    (...)Si desea poder cambiar los archivos de nivel superior sin tener que volver a compilar todo el sitio, puede establecer en true el atributo optimizeCompilations del elemento compilation  en el archivo Web.config.Si el valor de optimizeCompilations es true, al cambiar un archivo de nivel superior, solo se vuelven a compilar los archivos afectados. (...)

    Fix: para que funcione deberias tener estos hotfix dependiendo del Sist. Operativo

    • For XP and Server 2003 : go here
    • For Vista and Server 2008 : go here
    • For Windows 7 , ya lo tiene!

    Pensemos, ( tambien esto esta en la pagina de MSDN)

    • Si no cambias alguna firma de un metodo, tus paginas que utilizan las dll seguran funcionado
    • Si tienes metodos nuevos, las nuevas paginas utilizan las nuevo metodos y seran compiladas dinamicamnte

    NOTA Final 1: (...)Si desea utilizar el atributo optimizeCompilations para minimizar el tiempo de la compilación dinámica, deberá revisar atentamente cada cambio que realice en los archivos de nivel superior de un sitio y, si hay algún cambio que no sea seguro, deberá quitar temporalmente el atributo optimizeCompilations o establecer su valor en false.(...)

    NOTA Final 2: Jesus, si puedes probarlo porque no se si reinicia la app. Creeria que no ya que esta "optimizada"

     

     

    TEMA 1.1 (bonus/recomendacion): Ver la forma de cambiar donde se guarda el estado de session (Recomendación)

    Como te comente mas arriba, seria bueno modificar el lugar donde se guardan el estado de sessio. Si tu app hace uso intensivo o mucho incpaie en utilizacion de vbles de session, seria bueno que no este en modo InProc, para que no tengas este tipo de inconvenientes, ademas de por que estas actualizando periodicamente parte del tu app web.
    Por eso en el anterior comentario, solamente escribi esto que con esto solucionas todo y ademas haces que tu app sea "escalable" (lo cual no lo hace posible con la session en modo InProc)

     

    Enlaces:
    --------------

     

     

    Espero que te sirva de ayuda o guía.

     

     

     


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    • Marcado como respuesta Jesús Bosch jueves, 4 de noviembre de 2010 15:28
    jueves, 4 de noviembre de 2010 14:40

Todas las respuestas

  • Mira a mi me paso algo similar, cuando creaba una nueva dll para la pagina de un cliente debia subir todo el bin desde cero pero despues bastaba con subir la o las dll que necesitara con el filezilla y no me causo mas problemas.

    saludos

    Javier


    "Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta". Si la respuesta te ha sido util Votala."
    jueves, 28 de octubre de 2010 15:56
  • Hola Javier,

    Creo que mi situación es distinta. Yo no quiero subir la dll de un sitio web, uso compilación dinámica. No obstante el bin de mi sitio web contiene una dll de una librería de clases, la cual cada vez que la subo al servidor me reinicia la aplicación, y eso es lo que no quiero que ocurra.

     

    Saludos


    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    jueves, 28 de octubre de 2010 16:17
  • Hola Jesus

    Como sabrás cuando administras las sesiones en modo InProc se puede reiniciar por varias razones (mas abajo dejo post al respecto)
    Que yo sepa la única solución posible al ambiente de trabajo que describes es cambiar el modo de administración de la session de ASP.NET

    TE dejo unos post anteriores (que seguramente los habrás leído buscando info anterior en los foros, igual los dejo como referencia)

    Como podes evitar? Cambiando el modo de administracion a otro modo que no "involucre la perdida de tus variables" es decir en modo

    • StateServer (en un servidor de sessionm que puede ser la misma maquina con el servicio corriendo)
    • Sql Server (un poco mas lento que el anterior, pero se guarda en una base de datos SQL Server)
    • Custom... (aqui tendrias que implementarlo)

    En los post anteriores hay mas info.

    Espero que te sirva de ayuda o guía.



    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    lunes, 1 de noviembre de 2010 0:14
  • Hola

    ¿ Has podido solucionar tu problema ?

    Saludos
    Eduardo Portescheller
    jueves, 4 de noviembre de 2010 13:32
    Moderador
  • no. Es que realmente no veo que la solución propuesta tenga nada que ver con el problema...
    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    jueves, 4 de noviembre de 2010 13:34
  • Hola Jesús Bosch Medallas del usuario Medallas del usuario Medallas del usuario Medallas del usuario

    TEMA 1: Cambios en BIN sin compilar todo el sitio (sin reinciar)

    Si solamente quieres que no se reinicie todo el sitio puedes probar el atributo optimizeCompilations  de la seccion compilation del web.config

    Cuando haces cambiosen archivos de n ivel superior (global.asax, App_Code, o BIN) se compila todo el sitio, eso ya lo sabemos.
    Textual de MSDN:
    (...)Si desea poder cambiar los archivos de nivel superior sin tener que volver a compilar todo el sitio, puede establecer en true el atributo optimizeCompilations del elemento compilation  en el archivo Web.config.Si el valor de optimizeCompilations es true, al cambiar un archivo de nivel superior, solo se vuelven a compilar los archivos afectados. (...)

    Fix: para que funcione deberias tener estos hotfix dependiendo del Sist. Operativo

    • For XP and Server 2003 : go here
    • For Vista and Server 2008 : go here
    • For Windows 7 , ya lo tiene!

    Pensemos, ( tambien esto esta en la pagina de MSDN)

    • Si no cambias alguna firma de un metodo, tus paginas que utilizan las dll seguran funcionado
    • Si tienes metodos nuevos, las nuevas paginas utilizan las nuevo metodos y seran compiladas dinamicamnte

    NOTA Final 1: (...)Si desea utilizar el atributo optimizeCompilations para minimizar el tiempo de la compilación dinámica, deberá revisar atentamente cada cambio que realice en los archivos de nivel superior de un sitio y, si hay algún cambio que no sea seguro, deberá quitar temporalmente el atributo optimizeCompilations o establecer su valor en false.(...)

    NOTA Final 2: Jesus, si puedes probarlo porque no se si reinicia la app. Creeria que no ya que esta "optimizada"

     

     

    TEMA 1.1 (bonus/recomendacion): Ver la forma de cambiar donde se guarda el estado de session (Recomendación)

    Como te comente mas arriba, seria bueno modificar el lugar donde se guardan el estado de sessio. Si tu app hace uso intensivo o mucho incpaie en utilizacion de vbles de session, seria bueno que no este en modo InProc, para que no tengas este tipo de inconvenientes, ademas de por que estas actualizando periodicamente parte del tu app web.
    Por eso en el anterior comentario, solamente escribi esto que con esto solucionas todo y ademas haces que tu app sea "escalable" (lo cual no lo hace posible con la session en modo InProc)

     

    Enlaces:
    --------------

     

     

    Espero que te sirva de ayuda o guía.

     

     

     


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    • Marcado como respuesta Jesús Bosch jueves, 4 de noviembre de 2010 15:28
    jueves, 4 de noviembre de 2010 14:40
  • ok perdona, no te había entendido en el primer mensaje :)
    Jesús Bosch Aiguadé
    http://geeks.ms/blogs/jbosch
    jueves, 4 de noviembre de 2010 15:28