Sefer Algan'ın Günlüğü

Günlüğüme hoşgeldiniz...

.NET Remoting ile Singleton Problemi

Bildiginiz gibi .NET 'in dagitik uygulama gelistirme teknigi Remoting kütüphanesine dayaniyor. Remote olan nesneler iki modelde olabilir: Singleton ve SingleCall. Singleton modelinde remote nesneden sadece ve sadece bir adet nesne olusturulur. Yani her çagrimda ulastiginiz nesne host tarafinda aynidir. Boyle olmasina ragmen eger remote nesneye 5 (lease time) dakika içerisinde erismezseniz o nesne host tarafindan bellekten silinir ve çagrim yaparsaniz tekrar yeni bir nesne olusturulur.

Bu durum singleton kavramina aykiri düsmektedir. Bu durumu yaptigim bir uygulamayi test etmek için bir kahve almaya gitmem neticesinde kesfettim. Programi test edip  bir ara verdikten sonra yeniden test edince server tarafindaki nesnenin state(durum) ini kaybettigini gördüm. Bunun bir bug yada bilmedigim bir neden den olabilecegini düsündüm ve arastirmaya basladim. Arastirmalarim bunun bir bug degil "by design" yani bir tasarim seçenegi oldugunu gösterdi. Peki Singleton bir nesnenin sonsuz ömürlü olmasi için ne olmasi gerekiyor! Bu sorunun cevabi ise MarshalByRefObject sinifnin InitializeLifetimeService metodunu override etmek ve geriye null döndürmek. Yani remote nesneleri asagidaki gibi tasarlamak gerekiyor.

public class MyRemoteObject : System.MarshalByRefObject
{
  public override Object InitializeLifetimeService()
  {
    return null;
  }

  .....

}

Leave a Comment

(required) 

(required) 

(optional)

(required)