Excepción en la Web del Servicio de bloqueos de archivo DLL y se evita su publicación.Solución?

StackOverflow https://stackoverflow.com/questions/35479

Pregunta

Estoy usando una DLL nativa (FastImage.dll) en C# ASP.NET Servicio Web que algunas veces se bloquea (no se puede eliminar---dice acceso denegado);esto requiere detener IIS para eliminar el archivo DLL.La incapacidad para eliminar este archivo DLL en la carpeta bin de mi Web publicado Servicio me impide publicar con éxito (aunque se piensa que es publicado con éxito!), que hace que el desarrollo y corregir el error difícil (especialmente cuando se acaba felizmente se ejecuta código antiguo ya que mis cambios no se reflejarán en el servidor!).Tenga en cuenta que el error que causaba que el Servicio Web de la bomba y el bloqueo de la DLL está en mi código, que está fuera de dicho DLL, así que creo que este es un problema más general que sólo el FreeImage de la biblioteca (no para traer a cualquier tipo de calor).

  1. ¿Alguien ha experimentado esto?
  2. Hay una manera de asegurarse de que cuando dice "Publicar éxito" desde el IDE de VS que realmente significa, o a ejecutar una especie de secuencia de comandos para comprobar que los archivos son realmente eliminado antes de intentar Publicar (como un pre-paso de generación en VC++).(Ahora me elimine manualmente los archivos antes de la publicación para asegurarse de que sé que el Dll fueron reemplazados, en lugar de correr de edad Dll.Es todavía un problema, aunque si no puedo eliminar el archivo DLL.)
  3. ¿Cómo puedo detectar si un archivo se ha eliminado correctamente desde un archivo por lotes?(por lo que puede iniciar y detener IIS si se produce un error)
  4. Es posible iniciar y detener IIS desde una secuencia de comandos (preferiblemente a partir de la Publicación...acción en el VS IDE) y si es así, ¿cómo?
¿Fue útil?

Solución

El uso de la herramienta de línea de comando IISReset sólo reiniciar IIS en el equipo local, no en un servidor remoto que estás publicando.

Suponiendo que se va a publicar en un servidor Windows 2003 server, me gustaría sugerirle que la un poco menos drástico paso de detener y reiniciar el IIS AppPool en el sitio web o la carpeta virtual en el que el servicio web se ejecuta.(De esa manera usted no está tomando todos los sitios que se ejecutan en el servidor de destino sin conexión). Esto también supone que el servicio web se ejecuta en su propia aplicación de la piscina.Idealmente debería, por lo que mantenerlo aislado.

Yo recomiendo entrar desde el uso de los procesos de Publicación y a considerar el uso de una Web de la Implementación del Proyecto.Aquí hay un post en el ScottGu del blog que detalla VS 2005 Web de Proyectos de Implementación.

La ventaja de la Web de Proyecto de Implementación de método es que proporciona toda la potencia y capacidad de MSbuild, como en realidad es sólo una conveniencia envoltura alrededor de MSBuild.He aquí un post desde el equipo de MSBuild generación previa y posterior a la generación de capacidades

Espero que esto ayude.

Otros consejos

Usted podría utilizar la herramienta de línea de comando IISReset para detener/reiniciar iis.Así que usted podría escribir un simple archivo de proceso por lotes para detener iis, copie los archivos y, a continuación, reinicie iis.No estoy seguro de cómo integrar esto con el VS característica de publicación, sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top