2010-11-26 17 views
5

Điều gì sẽ là một cách tốt để hạn chế một ứng dụng web ASP.NET để chỉ phục vụ một số tiền nhất định của người dùng đồng thời?Làm cách nào để triển khai các giấy phép nổi trong ASP.NET?

Một số yêu cầu là:

  • Đơn yêu cầu đăng nhập (không cần phải lo lắng về việc người dùng vô danh).
  • Hỗ trợ nhiều máy chủ (trang trại/cân bằng tải).
  • Người dùng đang hoạt động có thể được coi là giống như một phiên hoạt động (chưa được ký hoặc hết hạn).
  • Thông tin đăng nhập bổ sung phải bị từ chối nếu đạt đến số lượng người dùng đồng thời tối đa.
  • Trách nhiệm là cần thiết (quản trị viên có thể xem ai là người dùng đang hoạt động).
  • Chi phí tối thiểu trên mỗi yêu cầu web (đặc biệt là tránh các chuyến đi tốn kém tới cơ sở dữ liệu theo từng yêu cầu).
  • Tổng số người dùng đồng thời phải được giữ chính xác ngay cả khi máy chủ web bị treo, ngắt kết nối khỏi mạng hoặc phải được khởi động lại.
  • Máy chủ bổ sung có sẵn cho các dịch vụ lưu trữ (ví dụ: máy chủ ứng dụng).
+0

Dường như đây là câu hỏi sao chép và dán từ thông số yêu cầu. Những thứ như "Trách nhiệm giải trình là cần thiết" và hạn chế người dùng đồng thời là hai điều hoàn toàn khác nhau. Tôi nghĩ bạn nên xem xét chỉ hỏi câu hỏi cụ thể ở đây? – Illuminati

+0

:) Trong thực tế, tôi chỉ cần gõ này, tôi là người viết các thông số kỹ thuật. Tôi có nghĩa là bất kỳ phương pháp nào được áp dụng phải đủ minh bạch để quản trị viên xem ai là ứng dụng nghĩ rằng đã đăng nhập khi đạt đến giới hạn. –

+0

Có lẽ là một HttpModule? Bạn rất có thể sẽ cần phải thực hiện logic này trong các sự kiện 'AuthenticateRequest' và' PostAuthenticateRequest'. http://msdn.microsoft.com/en-us/library/ms178473.aspx –

Trả lời

0

Để hạn chế số lượng người dùng đồng thời bạn sẽ có thể sử dụng,

<system.web> 
     <applicationPool maxConcurrentRequestsPerCPU="12" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/> 
</system.web> 

http://blogs.msdn.com/b/rakkimk/archive/2009/07/08/iis7-improving-asp-net-performance-concurrent-requests-while-on-integrated-mode.aspx

+0

Cảm ơn bạn nhưng đó là yêu cầu đồng thời, nó không hỗ trợ khái niệm của một người dùng, vì vậy tôi không nghĩ rằng nó có thể được sử dụng để thực hiện một mô hình cấp phép nổi. Tôi cần giới hạn số lượng người dùng có thể đăng nhập vào ứng dụng web, với các phiên hoạt động. –

+0

Vâng đúng .. tôi đã không đi qua bất kỳ cách nào để đạt được nó thông qua cấu hình một mình .. Bạn có lẽ nên nghĩ đến việc thực hiện một tùy chỉnh để theo dõi người dùng hiện tại thông qua logic đăng nhập? – Illuminati

+0

Tôi đồng ý; trong câu hỏi này, tôi đang cố gắng tìm ra cách tiếp cận tốt cho điều đó. Cảm ơn. –

2

Bạn có thể sử dụng một biến toàn cục (tĩnh) và treo lên các logic trong Application_OnStart của bạn, Sự kiện Application_BeginRequest hoặc Page_Load. Hãy xem ví dụ này để biết thêm ví dụ: http://dotnetperls.com/global-variables-aspnet

+0

Điều này giải quyết một phần vấn đề; nó có thể cho phép theo dõi những người dùng đang hoạt động trên một máy chủ, nhưng để theo dõi trên một trang trại máy chủ, có vẻ như việc triển khai phức tạp hơn là cần thiết. –

+0

Ah, vâng, bạn đúng. Trạng thái phiên có thể được di chuyển ra khỏi quá trình và tôi đã nhầm lẫn trạng thái phiên với trạng thái ứng dụng. Trạng thái ứng dụng thực sự rất dễ bay hơi (thay đổi web.config sẽ làm cho trạng thái ứng dụng của bạn bị xóa), vì vậy cách tiếp cận tốt hơn là sử dụng một số loại lưu trữ ngoại tuyến, chẳng hạn như máy chủ SQL.Bạn sẽ phải có một số loại đại lý quá trình để quản lý lưu trữ cơ sở dữ liệu để nó có thể truy cập bởi tất cả các máy chủ trong một trang trại máy chủ hoặc cấu trúc liên kết khu vườn web. – SRM

+0

Cảm ơn bạn. Có, có vẻ như một dịch vụ sẽ được yêu cầu để tổng hợp thông tin người dùng đang hoạt động trên toàn bộ trang trại máy chủ. Tôi không muốn sử dụng một cơ sở dữ liệu để ngăn chặn tranh chấp trên máy chủ cơ sở dữ liệu. Có vẻ như một danh sách trong bộ nhớ sẽ là đủ. –

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