2011-01-21 40 views
70

Oturum değerlerini WebMethod içinde kullanabilir miyim?Bir webmethod'ta oturuma nasıl erişebilirim?

Ben System.Web.Services.WebMethod(EnableSession = true) kullanarak denedim ama in this example gibi Oturum parametresini erişemez:

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

bir kod örneği Gönderme bize bir cevap size yardımcı olacaktır. – volpav

+0

Bir istisna mı alıyorsunuz? –

+1

Yukarıdaki örnekte, herhangi bir oturum değerine erişmeye çalıştığınızı görmüyorum. Önce oturum varını ayarlamalısın, sonra gönderdiğin bağlantı gibi ona erişmelisin. return (int) Oturum ["Dönüşümler"]; – capdragon

cevap

94

kullanabilirsiniz:

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

WebMethod çağıran kim JS var

HttpContext.Current.Session 

Ama aynı zamanda s sürece null olacak pecify EnableSession=true:

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

İronik olarak, zaten yaptığım şey buydu - sadece benim için çalışmıyordu. HttpContext.Current.Session.Count 0 döndürüyordu (yani, Oturumda öğe yok). Benim için cevap, [WebMethod] [WebMethod (EnableSession = true)] değiştirerek çalıştı. Woot! – BrainSlugs83

+3

Web'i yapılandırmayı unutmayın.config [sessionState mode = "InProc" /> – Moesio

10

Web Yöntemi için oturumu etkinleştirmek için iki yol vardır:

1. [WebMethod(enableSession:true)] 

2. [WebMethod(EnableSession = true)] 

enableSession:true benim için çalışmıyor yapıcı bağımsız değişkenle ilki. EnableSession özellikli ikinci özellik çalışır.

+0

[[]] [https://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute%28v=vs.110%29] yapamıyorum. aspx) eğer birincisi bile derlerse - inanmazdım. İkincisi işe yaradı çünkü mülkünüzü kuruyorsunuz (sadece burada XD). – MVCDS

+0

@MVCDS Neden bunun derlenmemesi gerektiğini düşünüyorsunuz? Bir kamu kurucusunu 'WebMethodAttribute (Boolean)' belgesinde bulabilirsiniz. – Warlock

+0

Kesinlikle haklısınız. Parametre adını ayarlamazsanız farklı davranır mı? Çünkü eğer yaparsa, kurucuları kodlarken çok tuhaf şeyler oldu (öznitelikler için). – MVCDS

0

Bu [WebMethod] public void MyMethod gibi deneyebilirsiniz (string ProductID dize Fiyat, dize Miktar, dize Toplam) // İşte yeni parametreyi ekleyin {CONNSTRING = new db_class db_class (); oturumu etkin olup olmadığını web.config de {

  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

biz kullanmak zorunda oturumu etkinleştirmek [WebMethod (EnableSession: true)] Şimdi

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


} 

oturumu kullanarak bu isimleri alınamadı için bu

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

    } 

yüzden olacak gibi gidebilir Tüm isimleri oturumdan geri çek ve göster.

İlgili konular