Làm cách nào để truy cập phiên trong webmethod?


85

Tôi có thể sử dụng các giá trị phiên bên trong a WebMethodkhông?

Tôi đã thử sử dụng System.Web.Services.WebMethod(EnableSession = true)nhưng tôi không thể truy cập thông số Phiên như trong ví dụ này :

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

đây là JS gọi webmethod:

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

4
Đăng một ví dụ mã sẽ giúp chúng tôi cung cấp cho bạn câu trả lời.
volpav

Bạn có nhận được một ngoại lệ?
Darin Dimitrov

1
Trong ví dụ trên, tôi không thấy bạn đang cố gắng truy cập bất kỳ giá trị phiên nào. Bạn cần thiết lập phiên var trước sau đó truy cập nó như liên kết bạn đã đăng. return (int) Session ["Chuyển đổi"];
capdragon

@volpav anh ấy đã cung cấp mã ví dụ.
BrainSlugs83

Không, @capdragon thuộc tính Session của Trang không tồn tại cho các phương thức tĩnh (WebMethods bắt buộc phải tĩnh) - anh ấy đang hỏi nơi tìm thuộc tính - như đã đăng bên dưới, nó nằm trong HttpContext hiện tại.
BrainSlugs83

Câu trả lời:


116

Bạn có thể dùng:

HttpContext.Current.Session

Nhưng nó sẽ là nulltrừ khi bạn cũng chỉ định EnableSession=true:

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

18
Trớ trêu thay, đây là những gì tôi đã và đang làm - chỉ là nó không hiệu quả với tôi. HttpContext.Current.Session.Count trả về 0 (tức là không có mục nào trong Session). Đối với tôi, câu trả lời nằm trong câu hỏi, việc thay đổi [WebMethod] thành [WebMethod (EnableSession = true)] đã hoạt động. Chà!
BrainSlugs83

4
Hãy nhớ để cấu hình web.config <chế độ sessionState = "InProc" />
Moesio

10

Có hai cách để kích hoạt phiên cho một Phương pháp Web:

1. [WebMethod(enableSession:true)]

2. [WebMethod(EnableSession = true)]

Cái đầu tiên có đối số hàm tạo enableSession:truekhông hoạt động với tôi. Cái thứ hai với EnableSessiontài sản hoạt động.


Tôi không thể tìm ra liệu cái đầu tiên có biên dịch hay không - tôi tin rằng nó không. Điều thứ hai không hoạt động bởi vì bạn đang thiết lập thuộc tính (chỉ rõ ràng ở đây XD).
MVCDS

@MVCDS Tại sao bạn nghĩ rằng nó không nên được biên dịch? Bạn có thể tìm thấy một hàm tạo công khai WebMethodAttribute(Boolean)trong tài liệu.
Warlock

Bạn hoàn toàn đúng. Nó có hoạt động khác nếu bạn không đặt tên tham số không? Bởi vì nếu đúng như vậy, một điều gì đó rất kỳ lạ đã xảy ra khi họ mã hóa các hàm tạo (cho các thuộc tính).
MVCDS

1

Đối với phiên kích hoạt, chúng tôi phải sử dụng [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.";
    }


}

Bây giờ để truy xuất những tên này bằng cách sử dụng phiên, chúng ta có thể đi như thế này

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

    }

vì vậy nó sẽ truy xuất tất cả các tên từ phiên và hiển thị.


0

Bạn có thể thử như thế này [WebMethod] public static void MyMethod (string ProductID, string Price, string Quantity, string Total) // Thêm tham số mới Tại đây {db_class Connstring = new db_class (); thử {

            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

Trong C #, trên mã phía sau trang sử dụng phương pháp web,

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

Và, trong trang 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;
                }
            });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.