2013-09-04 30 views
5

Tôi đang phát triển một trang web asp.net.Nội dung được đổi chỗ cho nhiều phiên người dùng trên trang web asp.net

  • Khi hai người dùng khác nhau truy cập trang web đó với các phiên khác nhau, một nội dung người dùng sẽ được trao đổi với người dùng khác.
  • Tôi đang sử dụng javacsript, gọi từ pagemethods từ các trang .aspx và C# ở mã phía sau.
  • Vấn đề này chủ yếu xảy ra khi hai người dùng đang gọi cùng một chức năng tại một thời điểm.
  • Tôi nghĩ rằng các biến tĩnh có thể gây ra vấn đề này và cố gắng không sử dụng bất kỳ biến tĩnh hoặc chức năng tĩnh nào ngoại trừ các hàm pagemethod, nơi nó được điều khiển cho một pagemethod là tĩnh.

hãy giúp tôi giải quyết vấn đề này.

+2

Bạn có thể đăng một ví dụ về mã không? – Damon

+0

Đây có phải là trang web đằng sau bộ cân bằng tải không? Phiên của bạn có được lưu trữ trong quá trình hoặc trong cơ sở dữ liệu không? –

+0

@ Damon này không liên quan đến một khối mã cụ thể .. vấn đề này xảy ra ở bất cứ nơi nào một biến tĩnh được sử dụng. tôi đã cố gắng để tránh các biến tĩnh và phương pháp tĩnh, nhưng đối với pagemethods nó là bắt buộc phải có chức năng tĩnh. vẫn còn nếu u cần mã mẫu, tôi sẽ cung cấp nó. – Hulk

Trả lời

1

Chúng tôi đã gặp phải sự cố tương tự và nhận thấy rằng đó là bộ cân bằng tải của chúng tôi (f5 Big-IP) đã làm rối loạn các phiên-id. Chúng tôi đã thay đổi loadbalancer thành stateful, và bây giờ nó hoạt động hoàn hảo ...

5

Cũng có thể liên quan đến luồng. Lock các biến đó và xem liệu điều đó có hữu ích hay không.

Phương pháp tĩnh không đảm bảo trạng thái biến tĩnh mặc dù các phương pháp được đảm bảo an toàn chỉ. Bạn phải quản lý trạng thái đó và asp.net xử lý các biến tĩnh như được chia sẻ giữa tất cả người dùng. Xem this answer từ một câu hỏi liên quan.

More đọc: Thread Synchronization

+0

Việc khóa các biến tĩnh/chức năng tĩnh là tốt, nhưng khi số lượng người dùng truy cập cùng chức năng, khi đó khóa này có thể khiến trang web bị chậm, phải không? – Hulk

+0

Chi phí trong hầu hết các trường hợp sẽ không đáng kể, tôi hiếm khi gặp phải tình huống mà tôi phải quay lại và tối ưu hóa. Nhưng khi bạn bắt đầu xem xét việc đồng bộ hóa luồng của nó là một thế giới hoàn toàn mới. Rất nhiều công cụ thú vị phức tạp như [Semaphores] (http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx) và [Mutexes] (http://msdn.microsoft.com/vi -us/library/system.threading.mutex.aspx). – TombMedia

+0

Xin lỗi cho tất cả các ý kiến ​​Hulk nhưng [câu hỏi này] (http://stackoverflow.com/questions/154551/volatile-vs-interlocked-vs-lock) thực sự là một trong những bạn muốn đọc, [this one] (http : //stackoverflow.com/questions/4673618/how-expensive-is-the-lock-statement) trả lời câu hỏi của bạn về tốc độ - nhưng câu trả lời ngắn là 50ns. – TombMedia

1
  • bật dịch vụ nhà nước aspnet trong các dịch vụ cửa sổ.
  • phiên sử dụng [ "x"] thay vì tĩnh x
  • sử dụng ViewState [ "x"] cho cấp độ trang đánh giá cao
1

Kiểm tra cấu hình trạng thái phiên của bạn (xem ví dụ dưới đây). Có lẽ bạn sử dụng một chế độ khác với "InProc" và chạy trong một số vấn đề với điều đó.

<sessionState mode="InProc" cookieless="false" timeout="60" /> 

Bạn cũng có thể xem xét sử dụng bộ nhớ đệm với các khóa sử dụng SessionID làm tiền tố. Thư viện doanh nghiệp cung cấp khả năng thực hiện bộ nhớ đệm tốt.

Hy vọng điều này sẽ hữu ích.

1

xóa bạn sử dụng biến tĩnh và phương pháp tĩnh để trả lời yêu cầu của bạn.

1

Thêm sessionState trong web.config:

<configuration> 
    <system.web> 
    <sessionState timeout="120" mode=" [InProc|StateServer|SQLServer|Custom]" cookieless="false" /> 
    </system.web> 
</configuration> 

Hãy thử cũng là giải pháp sau đây:

  1. Start> Administrative Tools> Dịch vụ
  2. nhấp chuột phải vào ASP.NET Nhà nước Dịch vụ và nhấp vào 'bắt đầu'.

Các biến cũng cần phải LOCK như được đề cập trong @TombMedia's Answer.

Liên kết này có thể được giúp bạn: Exploring Session in ASP.NET

0

này là được thiết lập trong Web.config và <% @ OutputCache thời gian = "1" varybyparam = "none" %> này phải được loại bỏ tất cả các .aspx Biểu mẫu ..

Kính trọng Rs

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