Makale Özeti

Makale dizimizin son bölümünde Formatterlar, Nesne gönderilmesi,Konfigürasyon dosyaları ve yayınlama konularından bahsedilecektir.

Makale

Microsoft .NET Remoting Framework – Part III

Son bölümümüzdeki Formatterlar, Nesne gönderilmesi,Konfigürasyon dosyaları ve yayınlama konularından bahsedilecektir.

Formatter

.NET Remoting uygulamalarında veriyi kanallardan transfer etmeden önce uygun bir formata dönüştürmek gerekir. Formater, client ve server nesnelerinin birbirlerine bağlayan kanallar içersindeki mesajların nasıl encode ve decode edileceğini belirleyen bileşenlerdir. Client nesnesinden server nesnesine bir mesaj gönderileceği zaman formatter’lar mesajı kanala verilmeden önce bir stream’a serialize ederler. Server tarafında, formatter gelen stream’ı okuyup deserialize ederek orjinal mesajı elde eder. Remoting varsayılan olarak iki formatter’a destek verir : SoapFormatter veBinaryFormatter.

SoapFormatter : Soapformatter, SOAP (Simple Object Access Protocol) üzerine inşaa edilmiştir. Bu protokolün genişleyebilir, modüler ve HTTP yada TCP gibi herhangi özel bir protokole özgü olmaması mimari olarak birbirine uygun olmayan uygulamaların birbirleriyle haberleşmesi için SOAP’ı ideal bir protokol haline getirir. Çünkü SOAP, XML-tabanlı bir protokoldür yani metin tabanlıdır. Metin tabanlı olmasının mimari açıdan getirdiği bu artının yanında mesajlar SOAP olarak iletildiği için boyutları daha büyüktür. Dolayısıyla network üzerinde yoğun bir trafik oluşturur.

BinaryFormatter : Binaryformatter, kanallar içersinde bilgi transferi için binary mesajlar kullanır. Yani Binaryformatter nesneyi binary olarak serialize eder. Bu, SOAP formatından daha yetenekli ve kolay bir yoldur.  Ancak, sadece .NET framework uygulamaları binary formatınındaki nesneyi okuyabilir. Binary tabanlı olmasının uygulama mimarileri açısından getirdiği bu sınırlamaya karşın, mesaj boyutları daha küçüktür. Dolayısıyla network üzerinde daha az trafik oluşturur.

Uygulamanızdaki ihtiyacınıza göre bu iki formattan birini tercih edebilir yada iFormatter interface’ini implement’e ederek kendi formatter’ınızı geliştirebilirsiniz.

SoapFormatter

BinaryFormatter

Veri SOAP kullanılarak gönderilir

Veri binary mesajlar kullanılarak gönderilir

Mimari olarak birbirine uygun olmayan uygulamaların birbirleriyle haberleşmesi için idealdir

Sadece .NET framework uygulamaları tarafından okunabilir

Metin tabanlıdır

Binary tabanlıdır.

Mesaj boyutları büyüktür

Mesaj boyutları küçüktür

Doğru Kanal ve Formatter’ın seçilmesi

 

SoapFormatter

BinaryFormatter

HTTP Kanal

§         Formatter’dan dolayı düşük verimle çalışır, XML stringleri işlenir ve istek/cevap kanal protokolü büyük veri transferleri yapar

§         Platformdan bağımsız olduğu için yüksek birarada çalışabilirlik sağlar ve firewall’lara takılmaz

§         IIS, SSL ve değişik authentication’lar sayesinde yüksek güvenlik sağlar

§         Formatter’dan dolayı ortalama bir verimle çalışır, binary mesajlar işlenir ve istek/cevap kanal protokolü daha küçük boyutlu veriler taşıdığından daha hızlı veri transferleri yapar

§         Standart bir kanalla standart olmayan bir formatter kullanılması iyi bir birarada çalışabilirlik sağlar

§         IIS, SSL ve değişik authentication’lar sayesinde yüksek güvenlik sağlar

 

TCP Kanal

§         Formatter’dan dolayı düşük verimle çalışır, XML stringleri işlenir ve istek/cevap kanal protokolü büyük veri transferleri yapmasına karşılık daha hızlı bir kanal kullanılmış olur

§         Platformdan bağımsız bir formatter kullanılıyor olmasına rağmen kanal firewall’lara takılabileceğinden dolayı ortalama bir birarada çalışabilirlik sağlar

§         Güvenliğin geliştirici tarafından sağ-lanması gerekir

§         Hızlı olan binary formatter, ve hızlı olan TCP kanalı kullanıldığından yüksek bir verimle çalışır

§         Standart omayan bir formatter kullanıldığından vede firewall’a takı-labileceğinden düşük  birarada çalı-şabilirlik sağlar

§         Güvenliğin geliştirici tarafından sağ-lanması gerekir

Sonuç olarak bu tabloda da görülebileceği gibi, TCP ve binary kombinasyonu yüksek verim ancak düşük birarada çalışabilirlik sunarken, HTTP ve SOAP kombinasyonu düşük verim ancak yüksek birarada çalışabilirlik sunar.

Nesnenin Gönderilmesi

 

Remotable nesnelere kendi application domainleri dışından erişebiliyoruz. Bazı nesneler Remoting sayesinde kendi application domainlerinden çıkıp başka application domainlerdeki nesnelerle etkileşirler. Bu etkileşim serileştirme (serialization) denen bir süreç sayesinde sağlanır. Ancak bazı durumlarda, nesnenin kendi yerine bir referansı (proxy) diğer application domain’e iletilir ve başka application domainlerdeki nesnelerle etkileşir. Bu tür bir etkileşme ise marshal-by-reference denen bir süreçle sağlanır.

Serileştirme (Serialization) : Serialization, bir server nesnesinin o anki durumunun encode edilerek bitler dizisi haline dönüştürülüp client process’ine gönderilmesidir. .NET Remoting yapısı bu bit stream’ini .NET Remoting sınırları içerisinde gönderir. Serialize edilmiş bir instance ulaşması gereken hedefe vardığında, bu bitler dizisi halindeki stream deserialize edilerek orjinal haline dönüştürülüp tekrar instance elde edilir.

.NET’te bir class’ı serialize etmek için Serializable atribute’u kullanılır. Serializable attribute’u class’larla birlikte kullanılarak hangi classların serialize edileceğini belirler. Bir class aşağıdaki şekilde serializable hale getirilir.

<Serializable ()> _

Class XYZ

      ....

End Class

 

Marshal-by-reference : Bazen nesnenin instance’nın, application domain dışına çıkarılmasının mümkün olmadığı durumlarla karşılaşılabilinir. Nesnenin instance’nın sadece belirlenmiş bir bilgisayarda bulunmasına müsade edilir. Böyle bir durumda instance’a, serialize edilmiş nesne yerine bir referans gönderilir. Buna marshal-by-reference metodu denir.

Class’ınızın bu metodu kullanabilmesi için .NET framework’ündeki classlardan biri olan System.MarshalByRefObject classını inherit etmesi gerekir. Bir nesne, aşağıdaki şekilde remote olarak erişebilinir hale getirilir.

Class XYZ

         Inherits System.MarshalByRefObject

            ....

End Class

 

Konfigürasyon Dosyaları

Client ve server nesneleri arasında sorunsuz bir iletişim için Remoting sisteminin belirlenmiş konfigürasyon bilgilerine ihtiyacı var olduğuna değinilmişti. Konfigürasyon bilgilerini programatik olarak uygulama içersinde kodlayabileceğimiz gibi bu iş için konfigürasyon dosyalarından da faydalanabilirsiniz.

Konfigürasyon dosyaları kullanmanın faydası, uygulamanız için gerekli konfigürasyon dosyalarını uygulama içersinde yazmamak ve dolayısıyla değişen konfigürasyon bilgilerini, uygulamanın çalıştığı yerdeki konfigürasyon dosyasını değiştirerek rahatlıkla güncelleyebilmektir.

<configuration>

      <system.runtime.remoting>

            <application>

                  <service>

                        <wellknownmode="Singleton"type="RmtNesne.RemoteNesne, RmtNesne"objectUri="Siparisler"/>

                  </service>

                  <channels>

                        <channelref="tcp"port="1453"/>

                  </channels>

            </application>

      </system.runtime.remoting>

</configuration>

 

Yayınlama (Hosting)

Remoting mimarisi, uygulamalarınızı yayınlamak için size esnek bir mimari sağlar. Uygulamanızı aşağıdakilerinden herhangi biri ile yayınlayabilirsiniz

  • Windows Servisi
  • IIS
  • Konsol Uygulaması
  • .NET Bileşen Servisleri

 

Ahmet HOSO
ahmet.hoso@bilgeadam.com