isauthenticated formsidentity false current c# asp.net azure session-variables webmethod

c# - formsidentity - Webmethods con HttpContext.Current.User.Identity.IsAuthenticated deja de funcionar después de la inactividad en Azure



httpcontext current user identity isauthenticated false (1)

Estoy probando el servidor Azure con páginas que usan funciones Ajax (json) / Webmethod.

Algunas de esas funciones comprueban HttpContext.Current.User.Identity.IsAuthenticated antes de que se ejecute el código. Desafortunadamente, si un usuario está conectado y la página no realiza una solicitud de devolución completa al servidor, solo las funciones de los métodos web que comprueban HttpContext.Current.User.Identity.IsAuthenticated dejan de ejecutarse por completo después de unos minutos sin dar ningún error. Ni siquiera ejecutan el bloque de código else (ver a continuación).

Probé esas páginas en un servidor local y todo funcionó bien como debería, incluso después de un largo período de inactividad. Aquí hay un ejemplo de un método web

[WebMethod] public static string serviceMenu(int IDservice) { StringBuilder SBphotoMenu = new StringBuilder(); if (HttpContext.Current.User.Identity.IsAuthenticated) { // Do stuff } else { // Do other stuff } return SBphotoMenu.ToString(); }

Estoy llamando al webmethod de la siguiente manera:

function serviceMenu(IDservice) { $.ajax({ type: "POST", url: "/UserControls/serviceMenu", data: "{ IDservice: " + IDservice }", contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { // Do Stuff } }) }

Este comportamiento solo ocurre si el usuario está conectado. Ahora, si el usuario no está conectado, todas las funciones funcionan correctamente incluso en Azure.

De hecho, cuando los métodos web dejan de funcionar y actualizo la página, el usuario aún está conectado y los métodos web comienzan a funcionar nuevamente, pero solo durante unos minutos y luego vuelve a producirse el mismo comportamiento.

¿Qué está mal?


El problema es causado por las variables de sesión y no por la autenticación. De hecho, el estado de la sesión no se aplica a las aplicaciones ASP.NET en Azure utilizando el método predeterminado "inProc". Azure utiliza otros métodos, algunos de los cuales son costosos: almacenamiento de tablas, almacenamiento en caché de SQL Azure o Windows Azure.