2011-01-21 27 views
70

Czy mogę używać wartości sesji wewnątrz WebMethod?Jak uzyskać dostęp do sesji w webmethod?

Próbowałem za pomocą System.Web.Services.WebMethod(EnableSession = true) ale nie może uzyskać dostępu parametr Session jak in this example:

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

oto JS, który wywołuje WebMethod:

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

Zamieszczenie przykładu kodu pomoże nam uzyskać odpowiedź. – volpav

+0

Czy otrzymujesz wyjątek? –

+1

W powyższym przykładzie nie widzę próby uzyskania dostępu do wartości sesji. Najpierw musisz ustawić sesję var, a następnie uzyskać do niej dostęp, tak jak opublikowany link. return (int) Session ["Konwersje"]; – capdragon

Odpowiedz

94

można użyć:

HttpContext.Current.Session 

Ale będzie to null, chyba że ty także s pecify EnableSession=true:

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

Jak na ironię, właśnie to już robiłem - tylko że nie działało dla mnie. HttpContext.Current.Session.Count wracał 0 (tzn. Brak pozycji w sesji). Dla mnie odpowiedź brzmiała: zmiana [WebMethod] na [WebMethod (EnableSession = true)] zadziałała. Woot! – BrainSlugs83

+3

Pamiętaj, aby skonfigurować sieć.config Moesio

10

Istnieją dwa sposoby włączenia sesji dla metody Web:

1. [WebMethod(enableSession:true)] 

2. [WebMethod(EnableSession = true)] 

Pierwszy z argumentów konstruktora enableSession:true nie działa dla mnie. Drugi z właściwościami własności EnableSession.

+0

Nie mogę [wymyślić] (https://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute%28v=vs.110%29. aspx), jeśli pierwszy nawet kompiluje - wierzę, że tak nie jest. Drugi działa, ponieważ ustawiasz właściwość (po prostu oczywistość tutaj XD). – MVCDS

+0

@MVCDS Dlaczego uważasz, że nie powinno się go kompilować? Można znaleźć publicznego konstruktora 'WebMethodAttribute (Boolean)' w dokumentacji. – Warlock

+0

Masz absolutną rację. Czy zachowuje się inaczej, jeśli nie ustawisz nazwy parametru? Bo jeśli tak, to coś bardzo dziwnego się wydarzyło, gdy kodowali konstruktory (dla atrybutów). – MVCDS

0

Można spróbować jak to [WebMethod] public static void myMethod (string ProductID, string cena, ilość ciąg, ciąg Total) // Dodaj nowy parametr Tu { db_class Connstring = new db_class(); spróbować {

  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; 
     } 
    } 
0

Dla umożliwienia sesji musimy użyć [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."; 
    } 


} 

Teraz przy sprowadzaniu tych nazw za pomocą sesji możemy udać się ten

[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; 
     } 

    } 

więc to będzie pobierz wszystkie nazwiska z sesji i pokaż.

Powiązane problemy