Makale Özeti

.Net Remoting Mimarisini Anlamak.

Makale

.NET Remoting Mimarisi - 1
 

Farklı bilgisayarlardaki uygulamaların iletişim kurabilmeleri için bilgisayarların aynı ağda olmaları gereklidir. .NET Remoting farklı uygulamaların aynı bilgisayarda olsun yada olmasın iletişim kurabilmelerini sağlar.

.NET Remoting sistemi uzaktaki nesneleri kullanmak için bazı servisler sunar, her nesnenin yaşam sürecinin yönetimini yapar ve uzak nesneler arasında mesajları transfer eder. Bu transferlerin yapılması için iletişim kanalları kullanılır.

İletişim kanalları ile transfer edilen herhangi bir mesaj transfer sırasında şifrelenir ve tekrar çözümlenir. Bu çözümleme işlemi .NET doğal formatlayıcıları tarafından yapılırlar. Bu aşama için iki çeşit formatlayıcı vardır. Bunlar binary ve XML formatlamadır. Performans açısından kritik olan uygulamalarda binary şifreleme kullanılmalıdır. Diğer remoting sistemleri ile birlikte çalışabilirlik durumlarında XML şifreleme kullanmak tercih edilmelidir.

NET Remoting sistemi istemcilerin nesnelerin metodlarını çağırmasını sağlar. .NET Remoting ile farklı uygulamaların iletişim kurabilmeleri için şu üç adım gerçekleşmelidir.
 

  • Bir sunucu nesnenin işlevlerini istemci olacak uygulamalara sunması gerekir.
  • Sunucu nesneye çağrı yapan bir istemci.
  • Çağrıların, mesajların karşılıklı transfer edilebilmesi için bir transfer mekanizması.

Nesnelere erişmek ve metodlarını çağırmak için bu nesnelerin referans adreslerine ihtiyacınız vardır.

Ancak referans adresleri işlem bağımlı olduğu için uzaktaki bir nesneye erişmek zordur. Bir işlemin içindeki adres bilgileri başka bir işlem için hiç bir anlam ifade etmemektedir. Bu sorunu aşabilmek için, sunucu nesnesinin bir kopyasını istemci uygulamada kullanmalısınız.

Nesneleri istemcideki işleme kopyalarken nesnelerin çok fazla sayıda metod içermediğinden ve büyük boyutlu nesneler olmadığından emin olun. Aşırı derecede büyük nesnelerin istemci tarafına kopyalanması veya değer olarak aktarılması kötü bir yol olacaktır.

Çünkü istemci uygulama sadece metodlardan dönen değerler ile ilgilenir. Tüm sunucu nesnesini istemciye kopyalamak istemci kaynaklarını, ağ üzerindeki bant genişliğini, ve işlem yapma süresini boşuna tüketecektir.


.NET Remoting Mimarisi

Sunucu ve istemcilerin iletişim kurabilmesi için, istemci uygulamasına sunucu tarafındaki nesnenin referansını eklemek gerekir.

Uzaktaki nesnenin bir örneğini oluşturduğunuz da istemci sunucu üzerindeki nesneye bir referans elde eder. Nesne referansı elde edildikten sonra, istemci sunucu nesnesinin metodlarını çağırabilir.

.NET Remoting sunucu nesnesinin istemci işleminde kullanılmasını sağlayabilmek için aracı (proxy) nesneler kullanır.

İstemci uygulamasında uzaktaki sınıf türünde yeni bir nesne oluşturulduğu zaman .NET Remoting bir proxy nesnesi oluşturur ve bu nesneyi istemci bilgisayara gönderir.
Bu proxy nesnesi sunucu nesnesinin tüm metod ve özelliklerine referanslar içerir.

Bu proxy nesnesinin üzerinde bulunan bir metodu çağırdığınız zaman remoting sistemi isteği alır ve sunucudaki işleme yönlendirir, sunucu nesnesini tetikler. Ve geriye dönüş değerini istemci proxy nesnesi ile döner. Bu şekilde sonuç istemci uygulamaya döndürülmüş olur.

Remoting sistemi oluşturmak için bazı teknolojiler ile düşük seviyede bazı işlemler yapılır, ağ bağlantısı açmak, mesajları formatlamak, mesajları mesaj akımına (stream) eklemek gibi işlemler yapılır.

Bu teknolojilerin bileşimine transfer kanalı (transport channel) denir.


Remoting sistemi sunucudaki sınıfı temsil eden bir proxy nesnesi oluşturur ve istemciye proxy nesnesinin bir referansını döner.

Bir istemci uzaktaki nesnenin bir metodunu çağırdığı zaman remoting sistemi metod çağrısını yakalar, tür bilgisini kontrol eder ve isteği kanal üzerinden sunucudaki işleme gönderir.

Dinlemede olan kanal istemci uygulamadan gelen isteği alır ve isteği sunucu poziyonundaki remoting sistemine iletir.
Sunucu remoting sistemi istek gelen nesneyi oluşturur ve o nesneye ilgili çağrıyı yapar.

İstek işlendikten sonra, sunucu üzerindeki remoting sistemi cevap olarak bir mesaj oluşturur ve sunucu kanalı tarafından istemci kanalına gönderilir.

İstemci remoting sistemi dönen istek sonucunu proxy nesnesini kullanarak istemci nesnesine döndürür.


Remoting Yapılabilen ve Yapılamayan Nesneler

İki çeşit nesne türü vardır. Remoting Yapılabilen(remotable) ve Remoting Yapılamayan (nonremotable) nesneler.

NonRemotable nesneler remoting sistemi ile uzaktan çalıştırılamayan nesnelerdir. Remotable nesneler ise kendi uygulama bölgesi dışından da remoting sistemi ile çalıştırılabilen nesnelerdir.

Remoting sistemi ile bazı nesneler referans olarak bazı nesneler ise değer olarak istemciye aktarılır. Büyük boyutlu çok sayıda metod içeren nesneleri remotable yapmamak en iyi yoldur. Büyük nesneyi remotable yapmayıp, daha sonra remotable olan ve boyutu daha küçük olup uzaktan yayınlamaya uygun olan nesneler oluşturmak ve bu küçük nesneler ile büyük olan ve nonremotable olan nesneleri kullanmak performans kazandıracaktır.


İki çeşit remotable nesne vardır:

  • Marshal-by-value nesneler.
    Bu nesneler kopyalanırlar ve değer olarak geçilirler.
  • Marshal-by-reference nesneler.
    Bu nesnelere istemciler proxy sınıflar kullanıp nesneye uzaktan erişirler.
     

Marshal-by-Value Nesneler

Marshal-by-Value nesneler ISerializable arayüzünü uygulamak (implementation) veya SerializableAttribute özelliği ile işaretlenmiş olmak zorundadır. Bu şekilde remoting sistemi nesneleri otomatik olarak serialize edebilmektedir.

Bir istemci uygulama marshal-by-value bir nesnenin bir metodunu çağırdığı zaman remoting sistemi nesnenin bir kopyasını oluşturur ve bu kopyayı istemci uygulamaya transfer eder. İstemci bilgisayar nesnenin bir kopyasını aldıktan sonra istenilen metod çağrısı istemci uygulama bölgesindeki nesne üzerinde çalışır.
Performans artırmak ve işlem zamanını düşürmek için sunucu nesnesini değer olarak istemci uygulama bölgesine kopyalayın. Marshal-by-value nesneler zaman ve kaynak tüketimine sebep olan ağ trafiğindeki gidiş-gelişleri azaltır.
 

Marshal-by-Reference Nesneler

Marshal-by-reference nesneleri System.MarshalByRefObject sınıfından miras alan remote yapılabilen nesnelerdir. Bir istemci marshal-by-reference olan sunucudaki bir nesnenin yeni bir örneğini oluşturduğu zaman .NET Remoting altyapısı istemci bölgesinde bir proxy nesnesi oluşturur bu proxy marshal-by-reference olan nesneyi temsil eder. İstemci metod çağrılarını proxy nesnesine yapar. Remoting sistemi metod çağrılarını sunucu uygulama bölgesine yönlendirir ve nesne üzerinde metod çağrısı gerçekleşir.

Dağıtık bir uygulama oluşturmadan önce şunları bilmeniz gerekir:

• Aynı uygulama bölgesinde oluşturulmuş olan bir nesneyi aynı domain içerisinden çağırabilirsiniz.
• Eğer uygulamanızın bölgesi (application domain) dışında bir bulunan bir nesneyi kullanmanız gerekiyor ise bu nesneyi mutlaka sunmalısınız. Bir nesne sunulduğu zaman başka bir uygulama ile bu nesneyi kullanmak için ya bu nesneyi diğer uygulama bölgesine değeri ile kopyalamak yada bir proxy nesnesi oluşturmak gerekir.
• Eğer sunulacak olan nesne çok sayıda metod içeriyorsa ve boyutu cok büyük ise nesnenin sunumu ve uygulama bölgeleri arasında tüketimi verimsiz olabilir. Bu yüzden uygulamanızın durumuna gore hangi tür nesne sunumu yapacağınıza karar vermelisiniz.
 

Nesne Aktivasyon Yöntemleri
 

Uzak Nesne Aktivasyonu Nedir?

Bir sınıf yazarken bu sınıfın türetilemesi ve kullanılması aşamasını izlemeye ihtiyacınız yoktur. Nesnenizin gelen metod isteklerine cevap verdiğini kontrol edersiniz. Ancak uzaktan kullanılacak bir nesne geliştirirken nesnenin oluşturulması ve yapıladırılmasını izlemelisiniz çünkü bu oluşturulma aşaması nesnenin nasıl oluşturulduğuna bağlıdır.

Uzak nesnelerin nasıl aktive edildiğinden haberdar olmalısınız. Remoting sistemi nesneleri istemcilere sağlamadan önce Remoting sisteme hangi aktivasyon türünün kullanılacağını belirlemeniz gerekmektedir.

Sunucu Aktivasyonu

Sunucu aktivasyonu uygulamasında istemci sunucu nesnesininin bir metoduna çağrı yaptığı zaman bu nesne sunucu üzerinde oluşturulur. Uzaktaki sınıftan bir nesne türetmek için new anahtar kelimesini kullandığınızda sunucuda nesne oluşturulmaz. Nesne metoda çağrı geldiğinde oluşturulur.

Şöyle bir örnek düşünelim; Merkezi Güvenlik Teşkilatı şubelerin istedikleri kişilerin sabıka kaydına ulaşabilmeleri için bir sunucu bileşeni oluşturmuş. Bu bileşen ile verilen kimlik numarasına bakılarak kişinin sabıka kaydı şubedeki istemci uygulamaya geri döndürülüyor. Bu uygulamada sunucudaki nesne metoda istek gelene kadar aktive edilmez. Bir metoda istek geldiğinde sunucu nesnesi aktive edilir. Bu sunucu aktivasyonu olarak bilinir.
 

Sunucu aktiyasyonlu nesneleri iki türde oluşturabilirsiniz. SingleTon ve SingleCall.
Singleton nesneleri kaç istemci bağlanırsa bağlansın sadece bir örneği vardır. Nesneler varsayılan bir yaşam sürecine sahiptir. Bu yüzden bir Singleton nesne oluşturulduğunda sunucu nesnesinin sadece tek bir örneği oluşturulur.

Bir nesneyi SingleCall olarak tanımladığınızda remoting sistemi her bir istemci bir metod çağırdığında yeni bir nesne oluşturulur.

İstemci Aktivasyonu

İstemci uygulamasından new anahtar kelimesi ile yeni bir sunucu nesnesi türetildiğinde sunucuda yeni bir nesne oluşturulur.

İstemci aktivasyonlu nesneler yaşam süreleri kullanıldıkça devam eder. İstemci bir nesne oluşturduğu zaman nesnenin ömrü için varsayılan bir sure belirlenir. Sunucu nesnesi belirlenen yaşam süreci sonuna gelindiğinde istemci ile iletişim kurar ve varlığını devam ettirip ettirmiyeceğine karar verir. Eğer istemci o sırada ulaşılabilir durumda değil ise sunucu nesnesi yok edilmeden önce varsayılan sure kadar bekleyip ismteciye tekrar bağlanmayı dener ve yok olur..
 

Remoting Uygulaması Adımları

Sunucu ve istemci aktivasyonlu nesneleri öğrendikten sonra, basit remoting işlemlerini ve sunucu istemci arasında ilişki kurmayı öğrenilmelidir.

Bir nesneyi yayınlamak için aşağıdaki adımları gerçekleştirmeniz gerekmektedir.
 

  • Nesne sunumunu yapacak uygulama bölgesini tanımlayın.
  • Aktivasyon modunu belirleyin : sunucu veya istemci.
  • Bir kanal ve port tanımlayıp, oluşturun.


Sunucu nesnesini sunmak için Windows Servisi, Windows Formu veya Console uygulaması kullanabilirsiniz.
 

Cengiz HAN
Microsoft ASP.NET MVP
msn (ve email) : cengiz@cengizhan.com
(eğer online isem çekinmeden mesaj atabilirsiniz.)
e-mail : cengizh@yazgelistir.com