25 Mart 2008 Salı

Asp.Net uygulamalarinin Application Pool kullanilarak izole edilmesi

Asp.Net uygulamalarinin izolasyonu icin,

Uygulama Havuzları (Application Pool) kullanılabilir. Her uygulama için bir Uygulama Havuzu oluşturulur. Hangi havuzun sistem kaynaklarının ne kadarını kullanabileceği ayarlanır.

Bir Asp.NET uygulasının hareket kabiliyetini sınırlamak için aşağıdaki işlemler yapılabilir;

  • Uygulama için yeni bir Windows kullanıcısı oluşturulur.
  • Yeni kullanıcı, Users grubundan çıkartılır IIS_WPG grubuna eklenir.
  • Uygulama için yeni bir Uygulama Havuzu oluşturulur.
  • Uygulama Havuzunun Identity ayarı değiştirilir yeni kullanıcı üzerinden çalışması sağlanır.
  • Uygulamanın yeni Uygulama Havuzunu kullanması sağlanır.
  • Uygulamanın çalıştığı klasörlere kullanıcı için yeterli ve gerekli izinler verilir.
  • Windows TEMP klasörüne (Örn: C:\WINDOWS\Temp), IIS_WPG grubu için veya yeni kullanıcı için yazma yetkisi verilir.
  • Registry'de gerekli tüm dallara yazma yetkisi verin.

Makalede anlatılan türde sınırlamalar yapıldığında;

• Uygulamayı hack’leyen bir saldırgan, sistem genelini etkileyemez. Yalnızca uygulamanın kendi kaynaklarını tüketir. Yalnızca o uygulama çöker.
• Yazılan kötü ve performanssız kodlardan dolayı, sistem geneli etkilenmez.


Kaynak: blog.vukuf.com

Ajax kullanmanin avantaj ve dezavantajlari

Güzel bir karsilastirma:

http://blog.vukuf.com/2007/10/ajaxn-avantajlar-ve-dezavantajlar.html

18 Mart 2008 Salı

SQL Performans - NOT EXISTS yerine JOIN kullanarak perfomans artisi saglamak.

Iki iliskili tablo arasinda kayitlarin varligi sorgulanirken sql de "not exists" ifadesi kullaniliriz. Bu nekadar pratik ve yazimi kolay gözüksede performans acisindan büyük sorun cikarmaktadir.

Ve bu performans problemi üst tablolardaki join sayisi arttikca daha da büyümektedir. Bu sorunu cözmek icin "not exists" ifadesi yerine yazacagimiz sorguda JOIN kullanabiliriz.

Örnek olarak;

SELECT dk.VKopf_Nr
FROM Dossier_Kopf dk INNER JOIN
Dossier_Verfahren dv ON DV.Ref_Kopf = DK.VKopf_Nr
WHERE dk.Ref_Instanz='BM' and dk.VKopf_Sprache = 'D'
and DV.Ref_PSchritt IN (6,67)
and not exists (
select ref_dkopf from dbo.Verfahren_Rechtsfolge
where ref_dkopf = dk.VKopf_Nr
)

Yukardaki sorgununu tamamlanma süresi: 00:01:34

Bu sorguyu birde JOIN kullarak yazalim.

SELECT dk.VKopf_Nr
FROM Dossier_Kopf dk INNER JOIN
Dossier_Verfahren dv ON DV.Ref_Kopf = DK.VKopf_Nr
LEFT OUTER JOIN dbo.Verfahren_Rechtsfolge VR
ON DV.Ref_Kopf = VR.ref_dkopf
WHERE dk.Ref_Instanz='BM' and dk.VKopf_Sprache = 'D'
and DV.Ref_PSchritt IN (6,67)
and VR.ref_dkopf is null

Join kullanarak yazilan sorgununu tamamlanma süresi: 00:00:01


Elde ettigimiz sonuc her iki sorgudada aynidir fakat görüldügü gibi sorgularin calisma zamanlari arasinda cok büyük fark olusur.

Sonuc olarak JOIN ifadesi kullanarak yazilan sorgular bize cok büyük bir performans artisi saglamaktadir.





5 Mart 2008 Çarşamba

Connection Pooling and the "Timeout expired" exception FAQ

Özellikle web tabanli, ayni anda birden fazla kullanicisi olan uygulamalarda karsilasilan connection pooling ve connection timeout problemlerine karsi yazilmis bir FAQ makalesi.


http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx