2009-06-01 29 views
6

Chúng tôi có dịch vụ web asmx .net được gọi từ javascript (sử dụng ASP.Net AJAX) và yêu cầu quyền truy cập vào Phiên.Truy cập chỉ đọc vào phiên trong cuộc gọi dịch vụ web?

[WebMethod(true)] 
public string DoSomethingOnTheServer() { } 

Chúng tôi đang gặp sự cố phiên bị khóa trên yêu cầu đọc/ghi. Có cách nào để đánh dấu một phương thức dịch vụ web yêu cầu quyền truy cập chỉ đọc vào Phiên không?

Cảm ơn!

Trả lời

0

Theo MSDN documentation thuộc tính WebMethod có một số thuộc tính có thể, vì vậy tôi không chắc giá trị 'true' trong thuộc tính WebMethod của bạn sẽ làm gì.

Các bạn đã thử:

[WebMethod(EnableSession=true)] 

Theo this document mà nên cung cấp cho bạn truy cập vào phiên.

+0

Vấn đề là phương pháp cho phép cả đọc và viết truy cập ... Tôi đang tìm kiếm một cách chỉ cần bật quyền truy cập đọc (bật quyền truy cập ghi sẽ chặn khi bạn có nhiều yêu cầu đồng thời). Tuy nhiên, tôi không tin rằng có một cách. – Jonas

+2

Ah ha, bây giờ tôi thấy ... Bây giờ tôi đã thực hiện tìm kiếm nhiều hơn một chút, không có nghĩa là bạn có thể đặt Trang để có quyền truy cập chỉ đọc, nhưng không phải là một Dịch vụ Web. Điều gì xảy ra nếu bạn đặt WebMethods trong trang aspx (được hiển thị dưới dạng WebMethods) và đặt thuộc tính EnableSessionState của trang thành ReadOnly? Nó không phải là giải pháp tốt nhất, nhưng nó có thể làm việc. – PhillFox

4

Trang http://msdn.microsoft.com/en-us/library/aa480509.aspx dường như cho thấy câu trả lời là "không" - bạn không thể đánh dấu một WebSerivce là có EnableSessionState=ReadOnly.

Nếu bạn đang thực hiện các cuộc gọi dịch vụ Web đồng thời từ cùng một quy trình, các yêu cầu sẽ được đăng trên máy chủ sao cho chỉ một yêu cầu sẽ được thực hiện tại một thời điểm. Không giống như các trang .ASPX có hỗ trợ truy cập chỉ đọc vào đối tượng HttpSessionState, cho phép xử lý đồng thời nhiều yêu cầu, không có khả năng như vậy với các dịch vụ Web ASP.NET. Tất cả các cuộc gọi phương thức Web với các phiên được bật đều có quyền truy cập đọc/ghi và sẽ được đăng trong mỗi phiên.

Cảnh báo: Bài viết đó cũ (2002).

+0

cũ, nhưng có vẻ vẫn áp dụng :( – quetzalcoatl

1

Đây là một chủ đề thực sự cũ, nhưng tôi tình cờ tìm kiếm câu trả lời cho cùng một câu hỏi.

Tôi tìm thấy câu trả lời nào khác đâu, và sẽ để nó vào đây để internets khác ở vị trí của tôi:

Trong Global.asax bạn có thể chỉ định cho mỗi yêu cầu, những gì truy cập theo yêu cầu nên phải đối tượng session, và do đó nếu nó nên chặn hay không. dịch vụ asmx

private void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // This will set the session to read only for asmx services 
    // This will make the asmx services non blocking for other requests as it doesnt lock the session object 
    if (Context.Request.Path.Contains(".asmx/")) 
    { 
     Context.SetSessionStateBehavior(SessionStateBehavior.ReadOnly); 
    } 
} 

Bằng cách này luôn luôn chỉ có chỉ đọc truy cập vào phiên giao dịch và sẽ không chặn các yêu cầu khác

Các vấn đề liên quan