Problema de ejecucion!!

13/01/2007 - 15:32 por Eduardo | Informe spam
Mi problema es el siguiente:
Tengo una pagina default.aspx donde declaro un filesystemwatcher y en el
load de la misma lo pongo a funcionar

Dim MyWatcher As New System.IO.FileSystemWatcher()

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
MyWatcher.Path = Server.MapPath("./archivos")

MyWatcher.IncludeSubdirectories = False

MyWatcher.EnableRaisingEvents = True

AddHandler MyWatcher.Changed, New System.IO.FileSystemEventHandler(AddressOf
Me.myWatcher_Changed)

End Sub ' load del formulario



En el evento de control del watcher lo que pasa es que copia archivos al
variar algo de un directorio



Private Sub myWatcher_Changed(ByVal sender As System.Object, ByVal e As
System.IO.FileSystemEventArgs)

sArchivos = Directory.GetFiles(Server.MapPath("./archivos"))

For Each archivo In sArchivos

archivoInfo = New FileInfo(archivo)

File.Delete(Server.MapPath(Left(archivoInfo.Name, 4) & "/") &
archivoInfo.Name)

File.Copy(Server.MapPath("./archivos/") & archivoInfo.Name,
Server.MapPath(Left(archivoInfo.Name, 4) & "/") & archivoInfo.Name)

Next

End Sub ' control del directorio



El problema viene que cuando lo pruebo en mi maquina anda bien, pero cuando
lo subo al servidor no da ningun problema pero no copia los archivos, ya
hable con el provedor del servicio y tiene dado los permisos de ejecucion y
escritura y lectura y todo y como no se mucho sobre el tema temo de que este
haciendo algo mal con respecto al evento o si realmente se puede hacer en el
evento load para que quede chequeando el directorio o valla uno a saber que?

Bueno si alguien tiene alguna idea y me puede sacar ed este embrollo le
agradecería.

Eduardo.
 

Leer las respuestas

#1 Alberto Poblacion
14/01/2007 - 10:30 | Informe spam
"Eduardo" wrote in message
news:ujv4w%
Mi problema es el siguiente:
Tengo una pagina default.aspx donde declaro un filesystemwatcher y en el
load de la misma lo pongo a funcionar
[...]
El problema viene que cuando lo pruebo en mi maquina anda bien, pero
cuando lo subo al servidor no da ningun problema pero no copia los
archivos, ya



No sé por qué no te copia los ficheros en el servidor, sospecho un
problema de permisos.

Pero veo otro problema con tu código. Si en el Load de la página creas
un FileSystemWatcher y le conectas un evento en la misma página, cada vez
que alguien navegue a esa página se va a crear un nuevo FileSystemWatcher,
con lo que cada vez vas a tener más watchers vigilando el mismo directorio.
Además, al existir un evento conectado con una rutina dentro de la Clase de
la página, ese objeto página no es inalcanzable y por lo tanto el Garbage
Collector no puede liberar la memoria de ese objeto, con lo que cada vez que
alguien navegue a esa página vas a ir perdiendo memoria en el servidor.
Como alternativa, te sugiero que crees el FileSystemWatcher en el evento
Application_Start del global.asax, con la rutina de eventos también dentro
del global.asax, para que no tengas en funcionamiento más de una copia.

Por cierto, otra precaución con este tipo de código: observo que el
destino de la copia de los ficheros está por debajo de la propia web que
realiza la copia. Cuando .Net detecta que se copia o modifica un número
importante de ficheros (no he encontrado documentación sobre cuál es el
número exacto) dentro de una aplicación web, se reinicia automáticamente la
aplicación, con lo que se pierde el estado de sesión, cosa que puede ser
grave si lo estás usando en tu programa. Por otra parte, en tu caso tiene la
ventaja de que el reinicio te "limpia" todos esos watchers y objetos que te
has ido dejando cargados en memoria.

Preguntas similares