2013-03-22 4 views
12

मेरे पास [WebMethod] के रूप में चिह्नित पृष्ठ पर एक विधि है जो इसके संचालन के हिस्से के रूप में कुछ सत्र स्थिति का उपयोग करती है। इस कोड को लिखने के बाद, अचानक में सत्र स्थिति का उपयोग करते समय आपको EnableSessionState का उपयोग करने की आवश्यकता है, उदाहरण के लिए: http://msdn.microsoft.com/en-us/library/byxd99hx.aspx)। लेकिन ऐसा लगता है कि ठीक काम कर रहा है। क्यूं कर?WebSethod Access सत्र स्टेटस सक्षम सत्र स्थिति के बिना क्यों कर सकते हैं?

पीछे

नमूना कोड:

protected void Page_Load(object sender, EventArgs args) { 
    this.Session["variable"] = "hey there"; 
} 
[System.Web.Services.WebMethod] 
public static string GetSessionVariable() { 
    return (string)HttpContext.Current.Session["variable"]; 
} 

नमूना शरीर एचटीएमएल:

<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    function getSession() { 
     $.ajax({ 
      type: 'POST', 
      url: 'Default.aspx/GetSessionVariable', 
      data: '{ }', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function (msg) { 
       document.getElementById("showSessionVariable").innerHTML = msg.d; 
      } 
     }); 
     return false; 
    } 
</script> 
<form id="form1" runat="server"> 
    <div id="showSessionVariable"></div> 
    <button onclick='return getSession()'>Get Session Variable</button> 
</form> 

उत्तर

15

http://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute.enablesession(v=vs.90).aspx पर, आप देखेंगे कि यह XML वेब सेवाओं पर लागू होता है (यानी, System.Web.Services.WebService से प्राप्त कक्षाएं)। अपने पृष्ठ शायद System.Web.UI.Page फैली

[WebMethod(EnableSession=true)] 

वजह से, यह स्पष्ट रूप से सत्र सक्षम करने के लिए आवश्यक नहीं है। http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx पर, आप देख सकते हैं कि EnableSessionState डिफ़ॉल्ट रूप से पन्ने के लिए सक्षम है (जिसे आप शायद पहले ही जानते हैं)।

3

http://forums.asp.net/t/1630792.aspx/1

gsndotnet के उत्तर: आप ठीक कह रहे हैं, लेकिन जो कुछ भी आप कह रहे हैं में एक विधि के लिए लागू है वेब सर्विसेज का संदर्भ। हम वेब सेवा (.asmx) के तरीकों पर समान WebMethod विशेषता का भी उपयोग करते हैं। तो वेब सेवाओं के संदर्भ में जब हम सत्र तक पहुंच की अनुमति देना चाहते हैं तो हमें EnableSession = true जोड़ना होगा। जबकि PageMethods के संदर्भ में उनके पास पहले से ही सत्र तक पहुंच है क्योंकि उन्हें कक्षा वर्ग से प्राप्त कक्षा के अंदर परिभाषित किया गया है।

आपका एमएसडीएन लिंक का अर्थ है कि आप वेब सेवा का उपयोग करते हैं, यानी System.Web.Services.WebService से प्राप्त कक्षा। अपने कोड में आप सीधे अपनी पेज को पेज पर जोड़ते हैं, इसलिए इसमें सत्र तक पहुंच है।

संबंधित मुद्दे