Conexiones concurrentes a un archivo XML

08/11/2005 - 01:50 por Zenkius | Informe spam
Hola amigos!

Tengo un problema con un sitio web que estoy desarrollando. Pues resulta que
cuando se carga la página principal del sitio guardo datos del cliente que
hace la petición en un archivo XML, pero el problema que tengo es cuando
varios usuarios abren al mismo tiempo el sitio a algunos le devuelve una
página con el error: "The process cannot access the file
"C:\inetpub\wwwroot\file.xml" because it is being used by another process." y
esto debe ser pq el proceso de IIS está guardando los datos de uno de los
usuarios en el XML y tiene el archivo bloqueado con acceso exclusivo.

Lo que quiero saber es si existe alguna forma de que se puedan guardar datos
en el archivo xml de forma simultanea para que no devuelva este error?

Cualquier ayuda les agradeceré mucho, pq he cambiado el código C# varias
veces, buscando otras vías, pero no encuentro manera alguna de que me
funcione como quiero.

Saludos y muchos Zenkius!!!

Preguntas similare

Leer las respuestas

#6 Miguel Angel Campos
10/11/2005 - 09:54 | Informe spam
Ahora que lo he leido, muy buen artículo.

Un Saludo,

Miguel Angel Campos
MCAD.NET

"Octavio Hernandez" escribió en el mensaje
news:
Hola MA,

- Yo también he usado GetType() para esto alguna que otra vez, pero
precisamente en el artículo cuyo enlace he puesto antes te recomiendan que
no utilices ese objeto Type, sino un objeto estático definido por tí.

- Creo que tienes razón con respecto al tema de la escalabilidad a varios
servidores.

Slds - Octavio


"Miguel Angel Campos" <SPAMmacampos ARRUBA .idesarrollaSPAM.com> escribió
en el mensaje news:
Otra posible solución que he visto en otras ocaciones es utilizar el
mismo tipo del objeto:

lock(this.GetType())
{
}

De todas formas yo tiraría mejor por capturar la excepción que se produce
al intentar acceder al fichero XML, y reintentar varias veces hasta
conseguir completar la operación. Esta solución es mas escalable, puesto
que la solución del bloqueo solo aplica a un determinado proceso en una
sola máquina, no en el caso de utilizar varios servidores en una granja.
Un Saludo,

Miguel Angel Campos
MCAD.NET

"Octavio Hernandez" escribió en el mensaje
news:%
JuanCri,

Tu idea está en la línea correcta, pero así como está creo que no
funcionaría. El problema es que en las aplicaciones ASP.NET para cada
petición de página se genera una NUEVA INSTANCIA de la clase de la
página; en tu código 'this' apuntaría cada vez a un objeto distinto y no
habría sincronización. Lo correcto según este artículo


http://msdn.microsoft.com/library/d...032003.asp

es definirse un objeto estático dentro de la clase de la página y
utilizarlo como objeto de sincronización:

public class MiPagina: Page
{
private static Object objetoSincronizacion = new Object();

public void GuardarDatos (string dato)
{
lock (objetoSincronizacion)
{
// abrir xml
// ...
// guardar
// ...
// cerrar xml
// ...
}
}

Slds - Octavio


"JuanCri" escribió en el mensaje
news:
Lo único que se me ocurre es que pongas un lock dentro del método que
está guardando el archivo. Por ejemplo:

public void GuardarDatos (string dato)
{
lock (this)
{
// abrir xml
// ...
// guardar
// ...
// cerrar xml
// ...
}
}


Atte,
Juan C. Olivares
www.juancri.com










email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida