मैं वेबमैथोड में सत्र का उपयोग कैसे कर सकता हूं?


85

क्या मैं सत्र मान का उपयोग कर सकता हूं WebMethod?

मैंने उपयोग करने की कोशिश की है System.Web.Services.WebMethod(EnableSession = true)लेकिन मैं इस उदाहरण में सत्र पैरामीटर तक नहीं पहुँच सकता :

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

यहाँ जेएसएम जो webmethod कहता है:

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

4
एक कोड उदाहरण पोस्ट करने से हमें आपको उत्तर देने में मदद मिलेगी।
volpav

क्या आपको अपवाद मिल रहा है?
डारिन दिमित्रोव

1
ऊपर के उदाहरण में, मैं आपको किसी भी सत्र मान तक पहुँचने का प्रयास नहीं करता। आपको पहले सत्र var को सेट करने की आवश्यकता है फिर इसे आपके द्वारा पोस्ट किए गए लिंक की तरह एक्सेस करें। वापसी (इंट) सत्र ["रूपांतरण"];
कैपड्रैगन

@volpav उन्होंने उदाहरण कोड प्रदान किया।
BrainSlugs83

नहीं, @capdragon पेज के सत्र की संपत्ति स्थिर विधियों के लिए मौजूद नहीं है (WebMethods को स्थिर होना आवश्यक है) - वह पूछ रहा है कि संपत्ति को कहां खोजें - जैसा कि नीचे पोस्ट किया गया है, यह वर्तमान HttpContext में रहता है।
ब्रेनस्लग्स83

जवाबों:


116

आप उपयोग कर सकते हैं:

HttpContext.Current.Session

लेकिन यह nullतब तक होगा जब तक आप भी निर्दिष्ट नहीं करते EnableSession=true:

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

18
विडंबना यह है कि यह मैं पहले से ही कर रहा था - केवल यह मेरे लिए काम नहीं कर रहा था। HttpContext.Current.Session.Count 0 लौट रहा था (सत्र में कोई आइटम नहीं)। मेरे लिए, इस सवाल का जवाब था, [WebMethod] को [WebMethod (EnableSession = true)] में बदलकर काम किया। यहाँ प्रारंभ करें
ब्रेनस्ल्गस 83

4
वेब को कॉन्फ़िगर करना याद रखें ।config <sessionState mode = "InProc" />
Moesio

10

वेब विधि के लिए सत्र को सक्षम करने के दो तरीके हैं:

1. [WebMethod(enableSession:true)]

2. [WebMethod(EnableSession = true)]

निर्माता तर्क के साथ पहला enableSession:trueकाम मेरे लिए काम नहीं करता है। EnableSessionसंपत्ति के साथ दूसरा काम करता है।


मैं यह पता नहीं लगा सकता कि पहले वाला भी संकलन करता है या नहीं - मैं विश्वास करता हूँ कि यह नहीं है। दूसरा काम करता है क्योंकि आप संपत्ति सेट कर रहे हैं (बस यहाँ स्पष्ट किया जा रहा है XD)।
एमवीसीडीएस

@MVCDS आपको क्यों लगता है कि इसे संकलित नहीं किया जाना चाहिए? आप WebMethodAttribute(Boolean)डॉक्स में एक सार्वजनिक निर्माणकर्ता पा सकते हैं ।
वॉरलॉक

आप बिल्कुल सही कह रहे है। यदि आप पैरामीटर नाम सेट नहीं करते हैं तो क्या यह अलग तरह से व्यवहार करता है? क्योंकि अगर ऐसा होता है, तो कुछ बहुत अजीब हुआ जब वे कंस्ट्रक्टर (विशेषताओं के लिए) कोडिंग कर रहे थे।
एमवीसीडीएस

1

सक्षम सत्र के लिए हमें [WebMethod (सक्षम: सत्य) का उपयोग करना होगा]

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


}

अब सत्र का उपयोग करके इन नामों को पुनः प्राप्त करने के लिए हम इस तरह से जा सकते हैं

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

    }

इसलिए यह सत्र और शो से सभी नामों को वापस लेगा।


0

आप इस तरह की कोशिश कर सकते हैं [WebMethod] सार्वजनिक स्थैतिक शून्य MyMethod (string ProductID, string Price, string Quantity, string Total) // नया पैरामीटर यहाँ जोड़ें {db_class Connstring = new db_class (); प्रयत्न {

            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

C # में, वेब विधि का उपयोग करते हुए पृष्ठ के पीछे कोड पर,

[WebMethod(EnableSession = true)]
        public static int checkActiveSession()
        {
            if (HttpContext.Current.Session["USERID"] == null)
            {
                return 0;
            }
            else
            {
                return 1;
            }
        }

और, 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;
                }
            });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.