Selamlar,
IIS 7.5 üzerinde geliştirme yapıyoruz. Bunu yaparkende yoğun bir şekilde IIS'in .Net API'sini kullanıyoruz (namespace: Microsoft.Web.Administration).
Microsoft.Web.Administration API'side gidip IIS'in applicationHost.config dosyasını yönetiyor. Bildiğimiz xml bir dosya bu.
fakat şöyle bir sorun var;
Bu Microsoft.Web.Administration API'si Thread'leri yönetmiyor, yani API'yi kullanarak bir işlem yaparken, aynı anda başka bir yerden API'ye çağrı yapılıp Commit edilirse "Cannot commit vs.vs." diye işlemi durduruyor. Doğruda yapıyor ama bizim işimize gelmiyor tabi.
Sistem yoğun kullanılmaya başlayınca bu hatayı sık almaya başladık ve şöyle bir geçici çözüme gittik.
try
{
MakeChanges();
}
catch (COMException ex)
{
if (ex.ErrorCode == 898)
MakeChanges();
}
yani dosyayı başka bir thread istediğinde API malum hatayı fırlattığında işlemi yapana kadar uğraş gibilerinden bir çözüm...
Esas konuya gelirsek;
Bizim bu yapıdaki thread çakışmalarını yönetebileceğimiz ve munipule edeceğimiz bir tasarıma ihtiyacımız var.
Bu tasarım artık queue mi olur?, caching mekanizmaları mı olur? yoksa temp bir dosyada tutup arada bir esas dosyaya yazmak mı olur? karar vereceğiz fakat bu tip durumla karşılaşan tecrübeli arkadaşlar varsa nasıl çözdüklerini ve ne derece başarılı olduklarını öğrenmek isterim.
Not: Microsoft.Web.Administration çağrılarını aynı application domain'den gönderdiğimiz gibi, Tamamen farklı bir appDomain'de çalışan farklı PID'li bir uygulamalarımızda gönderebiliyor.
--
Oğuzhan