¿Cómo puedo acceder a la sesión en un webmethod?

¿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 Session 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 el webmethod:

  $.ajax({ type: "POST", url: 'Catalogo.aspx/checaItem', data: "{ id : 'teste' }", contentType: 'application/json; charset=utf-8', success: function (data) { alert(data); } }); 

Puedes usar:

 HttpContext.Current.Session 

Pero será null menos que también especifique EnableSession=true :

 [System.Web.Services.WebMethod(EnableSession = true)] public static String checaItem(String id) { return "zeta"; } 

Hay dos maneras de habilitar la sesión para un método web:

 1. [WebMethod(enableSession:true)] 2. [WebMethod(EnableSession = true)] 

El primero con el argumento de constructor enableSession:true no funciona para mí. El segundo con la propiedad EnableSession funciona.

Puede intentarlo de esta manera [WebMethod] public static void MyMethod (string ProductID, string Price, string Quantity, string 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; } } 

Eche un vistazo a web.config si la sesión está habilitada. Esta publicación aquí podría dar más ideas. https://stackoverflow.com/a/15711748/314373

Para habilitar la sesión tenemos que usar [WebMethod (enableSession: true)]

 [WebMethod(EnableSession=true)] public string saveName(string name) { List 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 Display() { List li1 = new List(); 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 muestra.