¿Puedo usar valores de sesión dentro de un WebMethod
?
Intenté usar System.Web.Services.WebMethod(EnableSession = true)
pero no puedo acceder al parámetro de sesión como en este ejemplo :
[System.Web.Services.WebMethod(EnableSession = true)]
[System.Web.Script.Services.ScriptMethod()]
public static String checaItem(String id)
{
return "zeta";
}
aquí está el JS que llama al método web:
$.ajax({
type: "POST",
url: 'Catalogo.aspx/checaItem',
data: "{ id : 'teste' }",
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data);
}
});
Respuestas:
Puedes usar:
Pero lo será a
null
menos que también especifiqueEnableSession=true
:[System.Web.Services.WebMethod(EnableSession = true)] public static String checaItem(String id) { return "zeta"; }
fuente
Hay dos formas de habilitar la sesión para un método web:
1. [WebMethod(enableSession:true)] 2. [WebMethod(EnableSession = true)]
El primero con el argumento del constructor
enableSession:true
no me funciona. El segundo conEnableSession
obra inmobiliaria.fuente
WebMethodAttribute(Boolean)
en docs.Para habilitar la sesión tenemos que usar [WebMethod (enableSession: true)]
[WebMethod(EnableSession=true)] public string saveName(string name) { List<string> li; if (Session["Name"] == null) { Session["Name"] = name; return "Data saved successfully."; } else { Session["Name"] = Session["Name"] + "," + name; return "Data saved successfully."; } }
Ahora, para recuperar estos nombres usando la sesión, podemos ir así
[WebMethod(EnableSession = true)] public List<string> Display() { List<string> li1 = new List<string>(); if (Session["Name"] == null) { li1.Add("No record to display"); return li1; } else { string[] names = Session["Name"].ToString().Split(','); foreach(string s in names) { li1.Add(s); } return li1; } }
por lo que recuperará todos los nombres de la sesión y mostrará.
fuente
Puede probar así [WebMethod] public static void MyMethod (cadena ProductID, cadena Precio, cadena Cantidad, cadena Total) // Agregar nuevo parámetro aquí {db_class Connstring = new db_class (); tratar {
DataTable dt = (DataTable)HttpContext.Current.Session["aaa"]; if (dt == null) { DataTable dtable = new DataTable(); dtable.Clear(); dtable.Columns.Add("ProductID");// Add new parameter Here dtable.Columns.Add("Price"); dtable.Columns.Add("Quantity"); dtable.Columns.Add("Total"); object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here dtable.Rows.Add(trow); HttpContext.Current.Session["aaa"] = dtable; } else { object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here dt.Rows.Add(trow); HttpContext.Current.Session["aaa"] = dt; } } catch (Exception) { throw; } }
fuente
Eche un vistazo a su web.config si la sesión está habilitada. Esta publicación aquí podría dar más ideas. https://stackoverflow.com/a/15711748/314373
fuente
En C #, en el código detrás de la página usando el método web,
[WebMethod(EnableSession = true)] public static int checkActiveSession() { if (HttpContext.Current.Session["USERID"] == null) { return 0; } else { return 1; } }
Y, en la página aspx,
$.ajax({ type: "post", url: "", // url here contentType: "application/json; charset=utf-8", dataType: "json", data: '{ }', crossDomain: true, async: false, success: function (data) { returnValue = data.d; if (returnValue == 1) { } else { alert("Your session has expired"); window.location = "../Default.aspx"; } }, error: function (request, status, error) { returnValue = 0; } });
fuente