Pregunta

he hecho algo así como el código siguiente:

protected void Page_Load(object sender, EventArgs e)
{
   Label1.Text = Session["loginid"].ToString();
}

protected void delete_click(object sender, EventArgs e)
{
    delete("mail1",Session["loginid"]);
}

private int delete(string mailid, string user)
{
 System.IO.Directory.Delete(Server.MapPath(@"~\files\" + user + @"\" + mailid), true);
}

Al pulsar el botón de borrar, todo funciona bien y la carpeta se elimina. pero después de que cuando las devoluciones de datos de páginas de nuevo y una NullRefrenceException se eleva a  Label1.Text = Session [ "loginid"] ToString ();.

¿por qué está sucediendo ... ??

Cuando no estoy utilizando este Directory.Delete () Método que todo funciona variables de finos y de sesión no se establecen en cero.

Cuando tracé mi solicitud I encontró que después de Directory.Delete () Las variables de sesión método estaban intactos y que era capaz de utilizar esas variables de sesión en el procesamiento después de Directory.Delete ().

Pero tan pronto como las devoluciones de datos de páginas todas las variables de sesión se establecen en NULL. Y este problema no aparece cuando no estoy usando este método delete ().

La carpeta I m se está borrando la carpeta de mi proyecto. I m de ejecutar este sitio web utilizando Visual Studio.

Por favor, ayuda.

¿Fue útil?

Solución

Sólo otra suposición aquí, pero tal vez es porque su modificando algo en su directorio de aplicaciones (desde el presentimiento de que su uso de Server.MapPath con el ~). IIS piensa que tal vez la aplicación ha cambiado y recicla la aplicación y, en consecuencia elimina todas las sesiones.

Esto es similar a si modifica el archivo web.config, mientras que alguien está usando la aplicación y se deja caer todas las sesiones y recicla la aplicación. ¿Está borrando un directorio que puede contener información que IIS está utilizando para la aplicación?

Se dijo que sólo ocurre cuando se incluye esa línea de código y una sesión será en realidad sólo se hacen borrosos constantemente (a menos que usted está haciendo usted mismo manualmente) cuando la aplicación se recicla por IIS o tiempo de espera. Es obvio que no se el tiempo de espera por lo que el reciclaje debe ser lo que está sucediendo.

Otros consejos

Es el directorio 'archivos' en la carpeta de aplicaciones web? Tal vez la aplicación y vuelve a funcionar cuando la eliminación de los archivos. Trate de usar sessionStateServer. Sus sesiones de mantener vivo.

Web.config:

<configuration>
    <system.web>
        <sessionState mode="StateServer"></sessionState>
    </system.web>
</configuration>

Eliminación de una carpeta en el directorio virtual puede hacer que la aplicación de re-arranque, perdiendo así todos los datos de la sesión. Para evitar esto, o bien borrar archivos individuales (no carpetas) o utilizar el StateServer para mantener sus sesiones.

Desde la página se carga correctamente antes de pulsar el botón de borrar, el problema es, presumiblemente, con la referencia Session["loginid"].ToString(). ¿Tiene cualquier otro código que hace referencia Session["loginid"]? El código que ha demostrado aquí no hará nada que elimina loginid de la sesión.

Sin embargo, si esta aplicación se ejecuta en un clúster de servidores y está utilizando el modo predeterminado de la sesión de en proceso, usted puede estar perdiendo el acceso a su sesión entre solicitudes HTTP porque están manejados por diferentes servidores. Ver aquí para obtener más información.

  

Si quito el directory.delete ()   la función del código a continuación, el conjunto   aplicación se ejecuta de manera bien sin   cualquier excepción

Ok, parece que hemos encontrado su problema. Su proyecto no tiene los privilegios necesarios para eliminar la direcotry (incluso si el directorio es deleted.nevertheless: hay problemas de privilegios)

supongo que eres aplicación está lanzando una excepción al realizar esta operación de archivo y comienza una nueva sesión. Tengo una situación similar en uno de mis proyectos, pero todavía no he encontrado la forma de resolverlo.

Estoy bastante seguro de que va a estar de acuerdo con la descripción si crea la Global.asax y conjunto de puntos de interrupción en Application_OnError y Session_OnStart (o sin embargo, estos métodos se deletreadas correctamente). Verá que el se produce un error y después se inicia una nueva sesión.

En primer lugar, un par de comprobaciones de validez:

  1. ¿Tiene sesión de trabajo como se esperaba en otras páginas?
  2. Es el método Delete borrar archivos en una carpeta especial ASP.NET, como App_Data o App_Code, que puede ser la causa de la aplicación de reinicio?

Esto es lo que me gustaría tratar de depurar este problema, después de comprobar lo anterior:

  1. Establecer un punto de interrupción en el método de eliminación y tienen la variable de sesión en una ventana de inspección. Vea lo que el valor de la variable de sesión es antes de la llamada a Directory.Delete es y lo que es después. ¿Es en ese momento cuando se está perdiendo la sesión, o no es hasta la próxima visita la página?
  2. El uso de una herramienta como Fiddler para examinar las galletas intercambiados entre el navegador y el servidor web en las devoluciones de datos. Comprobar que cuando el navegador primeras visitas se crea una nueva cookie de sesión y se almacena en el navegador. Entonces, cuando se elimina la carpeta, ver si el servidor web está enviando un nueva cookie de sesión de la respuesta de que la devolución de datos. Esto indicaría que una nueva sesión ha sido creada.

Gracias

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