2010-11-26 17 views
5

Bir ASP.NET web uygulamasını, yalnızca eşzamanlı kullanıcılardan oluşan bir birime hizmet vermek için kısıtlamanın iyi bir yolu ne olurdu?ASP.NET'te yüzen lisanslar nasıl uygulanır?

Bazı şartlar şunlardır:

  • Uygulama giriş (anonim kullanıcılar hakkında endişelenmenize gerek yok) gerektirir.
  • Birden çok sunucu desteği (çiftlik/yük dengeleme).
  • Etkin bir kullanıcının etkin oturum ile aynı olduğu düşünülebilir (imzalı veya süresi dolmamış).
  • Maksimum sayıda eşzamanlı kullanıcıya ulaşılmışsa ek oturum açmaları reddedilmelidir.
  • Hesap verebilirlik gerekli (yöneticiler etkin kullanıcıların kim olduğunu görebilmeli).
  • Her web isteği için minimum ücret (özellikle her istekte bir veritabanına yapılan masraflı yolculuklardan kaçınılır).
  • Bir web sunucusu askıda kalsa, ağ bağlantısını keserse veya yeniden başlatılsa bile, eşzamanlı kullanıcıların toplam sayısı doğru tutulmalıdır. Ana bilgisayar hizmetleri (örneğin, uygulama sunucuları) için ek sunucular mevcuttur.
+0

Bu, bir gereksinim spesifikasyonundan kopyalayıp yapıştırma sorusu gibi görünüyor. "Sorumluluk gerekli" gibi şeyler ve eşzamanlı kullanıcıları kısıtlamak iki tamamen farklı şeylerdir. Bence sadece buradaki özel soruyu sormayı düşünmelisin? – Illuminati

+0

:) Aslında bunu yazdım, ben özellikleri yazan adamım. Demek istediğim, hangi yöntem uygulanırsa, yöneticinin, uygulamanın, sınırın ne zaman ulaşıldığını düşündüğünü görmesi için yeterince şeffaf olması gerekir. –

+0

Muhtemelen bir HttpModule? Büyük olasılıkla bu mantığı "AuthenticateRequest" ve "PostAuthenticateRequest" olaylarında uygulamanız gerekir. http://msdn.microsoft.com/en-us/library/ms178473.aspx –

cevap

0

Kullanmak gerekir eşzamanlı kullanıcı sayısını kısıtlamak için

<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

Teşekkürler ama aynı anda gelen istekler, bir kullanıcı kavramını desteklemiyor, bu yüzden bunun bir yüzer lisanslama modelini uygulamak için kullanılabileceğini düşünmüyorum. Etkin oturumlarla web uygulamasında oturum açabilecek kullanıcıların sayısını sınırlamam gerekiyor. –

+0

Evet doğru..Sadece konfigürasyonda bunu gerçekleştirmenin herhangi bir yolu ile karşılaşmadım .. Muhtemelen mevcut kullanıcıları takip etmek için giriş mantığı ile özel bir uygulama yapmayı düşünmelisiniz? – Illuminati

+0

Katılıyorum; Bu soruda bunun için iyi yaklaşımların ne olacağını bulmaya çalışıyorum. Teşekkürler. –

2

Sen, global bir değişken (statik) kullanmak ve Application_OnStart mantığı bağlayıp Application_BeginRequest veya Page_Load olayları. Daha fazla örnek için buna bir göz atın: http://dotnetperls.com/global-variables-aspnet

+0

Bu, sorunun bir bölümünü çözüyor; Bir sunucuda aktif kullanıcıların izlenmesine izin verebilir, ancak bir sunucu çiftliğini izlemek için daha ayrıntılı bir uygulamaya ihtiyaç duyulacak gibi görünüyor. –

+0

Ah, evet, siz haklısınız. Oturum durumu işlemden çıkarılabilir ve uygulama durumuyla oturum durumunu karıştırıyordum. Uygulama durumu aslında çok uçucudur (web.config değiştirilirse uygulama durumunuz örneğin temizlenmelidir), böylece SQL server gibi bir çeşit çevrimdışı depolama kullanmak daha iyi bir yaklaşım olacaktır.Bir sunucu grubundaki veya web bahçe topolojisindeki tüm sunucular tarafından erişilebilmesini sağlamak için bu veritabanı depolamasını yönetmek için bir tür işlem aracısı bulundurmanız gerekir. – SRM

+0

Teşekkürler. Evet, aktif kullanıcı bilgilerinin sunucu grubu genelinde toplanması için bir hizmet gerekli görünmektedir. Veritabanı sunucusunda çekişmeyi önlemek için bunun için bir veritabanı kullanmamayı tercih ediyorum. Bir bellek içi liste yeterli olacak gibi görünüyor. –