.Net Remoting - Bölüm 1

.Net Remoting - Bölüm 1

Merhabalar, 3 bölümden oluşmuş .Net Remoting yazımızın ilk bölümünde .Net Remoting teknolojisini tanıyacağız. 2. Bölümde bir uygulama yazacağız bu uygulama Windows Form üstünden veriye erişmekle alakalı. 3. bölümde ise yine bir uygulama yazacağız ancak bu sefer istemci programımız Web Form olacak.

İlk bölüme başlayalım.

Remoting, Microsoft .Net mimarisinde dağıtık uygulamalar (distrubuted application) geliştirmek için çıkarttığı bir teknolojidir. Amacı çok katmanlı uygulamalar (n tier) oluşturup programların daha efektif ve güçlü çalışmasını sağlamaktır.

Her .Net programının içindeki işlem (metotlar gibi) kendi uygulama etki alanı (application domain) nında çalışır. Application Domainler sizin işlemlerinizi sarar. Bunun denetimini ve düzenlenmesini CLR (Common Langugage Runtime) ayarlar. Her işlem kendi domaininde çalıştığı için bir işlemin oluşturduğu bir hata diğer işlemleri etkilemez. Application Domainler bir çeşit izole etme yapısıdır. Ancak günümüzde bir çok program veriyi bir mantıkla başka bir programa yani kısacası iki farklı Application domain i arasında bir transfere ihtiyaç duyarlar. Bir işlemi sarmalamış Application Domainin içindeki bir nesneyi ele alalım. Bu nesnenin başka bir Application Domaine aktarılmasını sağlayan yöntemlerin en güzeli Remoting dir.

Remotin .Net mimarisinde olduğu için oldukça esnek bir yapıya sahiptir. Ancak Remoting in temeli metot paylaşmaya dayanmaktadır. Remoting işleminde nesneler direk olarak çağırılmazlar. Temel olarak metotları çağarılır. Biz çağardığımızda metotlar çağırılan nesnelerde işlenirler. Metotların Access modifier ları (erişim düzenleyici) bu metotların uzaktan çağarıldığında kullanılıp kullanılmayacağını anlatırlar. Public tanımlanan metotlar Remoting ile kullanılabilir. Bir Application Domainden diğer bir Application Domaine metot çağrısı kanallar aracılığı ile yapılır. Veriler kanallardan serialize ve deserialize yöntemleri ile yollanır. Serialize, bir nesneyi ve bu nesnenin tuttuğu veriyi birleştirip saklamaya (dosyaya yazmak, veya bir yerden bir yere yollamak) denilir. Remoting in desteklediği iki türlü serialize yöntemi vardır. SOAP ve Binary, Binary bilindiği gibi iki sisteme dayanır, oldukça hızldır. Veriler daha az yer tutar ve taşınması daha kolay olur. Diğer yöntem SOAP ile yapılan serializasyondur. XML kullanılarak yapılır. Daha yavaştır ancak XML in avantajlarını taşır.

Biraz daha bu işlemin temeline bakalım .Net tede classlar hiyararşik bir yapıya sahiptir (örneğin her class ın temelde object classından türetilmesi gibi). Bir çok nesnede temel olarak Remoting e izin veren class dan türemiştir. Eğer bir nesneye Marshalling (serialize için gereklidir. Marshalllama işi verilerin organize edilmesi toplanması demektir) işlemi uygulanabiliyorsa bu nesne remoting de transfer edilebilir. İki türlü Marshallama nesnesi vardır

MarshallByRef : Nesneler diğer client ın Application Domaine geçebilirler. Server da sadece bu geçen nesnelerin referansları bulunur.

MarshallByValue : Genellikle nesneler MarshallByValue ile tanımlanırlar. Bu türden nesneler Clienttan bir istek geldiğinde Serverda bu nesnelerin kopyaları oluşturulur ve istemcide bu nesnelerin referansları tutulur. MarshallByValue dan tanımlanmış bir nesnenin içindeki bir metota uzaktan istek geldiğinde Server bu veriyi serialize yöntemine maruz tutar ve bu nesneyi seriileştirir daha sonra seçtiğimiz serialize algoritmasına bağlı olarka nesne client a aktarılır ve clientta da nesne deserialize edilir. MarshallByValue işlemi az verilerde hızlıdır. Referans tuttuğu için ağ trafiğini azaltır. ancak çok büyük veri kümelerinde verinin serialize ve deserialize işlemleri çok zahmetli olabilir.

 

Verinin bir Application Domain den diğer Application Domaine aktarılması için yani bir uygulamadan diğer uygulamaya aktarılması için kanallar kullanılır. Bir nesne uzaktan bir veriyi çağardığı zaman Remoting Framework kayıtlı bir kanal varmı diye kontrol eder. Kanalın bir ucu serverda diğer ucuda istemcidedir. Kaydedilmiş bir kanal belli bir porttan, belli bir protokol ile veriyi iletir.

Üç türlü kanal vardır. TCP, HTTP ve SMTP, TCP kanalı verileri binary formatında serialize ederek kullanır. HTTP formatı ise verileri XML formatında serialize edip yollar.

.Net çok fazla geliştirilebilir bir yapıya sahiptir. İleride başka kanal türleri yada serialize yöntemleri çıkarsa programlarınızda bunlarıda kullanabilirsiniz.

Kanalları programlarınızda kullanırken Client ve Server olarak kullanabilirsiniz. Ancak .Net Framework de bu şekilde tanımlamadanda kullanabilirsiniz. Remoting Framework bunları ayırd edebilir.

Dim chnSrv As HttpServerChannel = New HttpServerChannel(1234)

Dim chnCli As HttpClientChannel = New HttpClientChannel(1234)

Bu tanımlama hem Server da hemde Clientta aşağıdaki şekildede yapılabilir.

Dim chn As HttpChannel = New HttpChannel(1234) 

Bu tanımlamadan sonra oluşturduğunuz kanalı kaydetmeniz gerekiyor.

ChannelServices.RegisterChannel(chn)

Yukarıda tanımlanan kanallarda HTTP yerine TCP yazarsanız TCP kanalı tanımlamış ve kaydetmiş olursunuz.

HTTP kanallarını tanımlamak için

System.Runtime.Remoting.Channels.Http namespacesini projenize eklemeniz,

TCP kanalları tanımlamak için

System.Runtime.Remoting.Channels.Tcp namespacesini projenize eklemeniz gerekiyor.

 

Verilerin kanallar üzerinden gönderilmeden önce, verilerin belli bir biçime dönüştürülmesini sağlayan (serialize) yönteme Formatters denir.

SOAP ve Binary olmak üzere iki formatters türü vardır.

Yani remoting işlemini yapmadan önce bu iki parametreyi düşünmelisiniz.

HTTP kanalları üzerinden SOAP formatter ı ile XML serialize yönteminimi kullanacaksınız, yoksa TCP kanalları üzerinden Binary formatter ı ile Binary serialize yönteminimi kullanacaksınız.

Bu iki yönteminde kendisine göre avantajları ve dezavantajları vardır.

Örnek olarak TCP kanalını ve binary yöntemini seçerseniz güvenlik duvarlarına (firewall) takılma ihtimaliniz artacak ancak veriler çok daha hızlı iletilecek. Eğer HTTP kanalını ve SOAP formatteri ile XML serialize yöntemini kullanırsanız veriler daha yavaş iletilecek ancak çok daha kolay ve problemsiz şekilde verilerinizi iletebileceksiniz.

İncelenecek son konu Sunucuda aktif olan nesnelerin (Server Activativion Object) yani serverda oluşan nesnelerin ne kadar ve nasıl yaşayacağı, ne zaman hafızadan silineceği ile alakalı. İki türü vardır Singleton yada SingleCall (bölüm 2 de nasıl kullanılacağını göreceksiniz)

Singleton : kaçtane client bağlanırsa bağlansın sadece bir tane nesne server da oluşturulur. Böylece bu nesnede yapılan bir değişiklik hepsine yansır.

SingleCall : aynı anda sadece bir client isteğine cevap verebilir. İstek sona erdiğinde ise sever in hafızasından silinir. Böylece serverin hafızası gereksiz kullanılmamış olur. Ancak her client için yeniden oluşturulduğundan ortak bir data tutmak çok zordur.

 

Bölüm 2 de Remoting ile ilgili istemcisi Windows Form olan bir örnek yapacağız. Ancak önce Remoting in nasıl çalıştığına aşağıdaki şekilden bir inceleyelim.

İkinci bölümde görüşmek üzere.

Döküman Arama

Başlık :

Kapat