Posso usar valores de sessão dentro de um WebMethod
?
Já tentei usar, System.Web.Services.WebMethod(EnableSession = true)
mas não consigo acessar o parâmetro Session como neste exemplo :
[System.Web.Services.WebMethod(EnableSession = true)]
[System.Web.Script.Services.ScriptMethod()]
public static String checaItem(String id)
{
return "zeta";
}
aqui está o JS que chama o método da web:
$.ajax({
type: "POST",
url: 'Catalogo.aspx/checaItem',
data: "{ id : 'teste' }",
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data);
}
});
Respostas:
Você pode usar:
Mas será, a
null
menos que você também especifiqueEnableSession=true
:[System.Web.Services.WebMethod(EnableSession = true)] public static String checaItem(String id) { return "zeta"; }
fonte
Existem duas maneiras de ativar a sessão para um Método da Web:
1. [WebMethod(enableSession:true)] 2. [WebMethod(EnableSession = true)]
O primeiro com argumento do construtor
enableSession:true
não funciona para mim. O segundo comEnableSession
obras imobiliárias.fonte
WebMethodAttribute(Boolean)
em documentos.Para ativar a sessão, temos 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."; } }
Agora, para recuperar esses nomes usando a sessão, podemos continuar assim
[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 isso recuperará todos os nomes da sessão e mostrará.
fonte
Você pode tentar assim [WebMethod] public static void MyMethod (string ProductID, string Price, string Quantidade, string Total) // Adicionar novo parâmetro aqui {db_class Connstring = new db_class (); tentar {
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; } }
fonte
Dê uma olhada em seu web.config se a sessão estiver habilitada. Este post aqui pode dar mais ideias. https://stackoverflow.com/a/15711748/314373
fonte
Em C #, no código por trás da página usando o método da web,
[WebMethod(EnableSession = true)] public static int checkActiveSession() { if (HttpContext.Current.Session["USERID"] == null) { return 0; } else { return 1; } }
E, na 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; } });
fonte