Makale Özeti

Bu makalede dizisi toplam 3 parçadan oluşacak olup, ilk bölümde küçük bir giriş yapıldıktan sonra dağıtık uygulama mimarisinin ne olduğundan ve remoting ile ilgili giriş yapılacak ve Remotable Nesne kavramından bahsedilecektir.

Makale

Microsoft .NET Remoting Framework – Part I

Bu makalede dizisi toplam 3 parçadan oluşacak olup, öncelikle dağıtık uygulama kavramı ile ilgili bir giriş yapılacak.Microsoft .Net Remoting Framework’ünün temellerini ve buna ek olarak Remoting Framework’ünün bileşenleri açıklanacaktır.

İlk bölümde küçük bir giriş yapıldıktan sonra dağıtık uygulama mimarisinin ne olduğundan ve remoting ile ilgili giriş yapılacak ve Remotable Nesne kavramından bahsedilecektir.

Giriş :

Dağıtık uygulamalar network üzerindeki bilgisayarlar da çalışan bileşenlerden oluşmuş yapılardır. Yani bir uygulamanın tüm bileşenleriyle tek bir bilgisayarda değilde birden fazla bilgisayarda çalışması anlamına gelir. Tüm bileşenler tek bir uygulamaymışcasına çalışırlar. Dağıtık uygulamalar hazırlamakta amaç, çok katmanlı uygulamalar (n-tier) oluşturup, programların daha efektif ve güçlü çalışmasını sağlamaktır.

Geleneksel olarak dağıtık uygulamalar belli başlı teknolojilerle geliştirilirler.

  • DCOM (Distiributed Component Object Model)
  • CORBA (Common Object Request Broker Architecture)
  • RMI (Remote Metod Invocation) gibi.

Geleneksel metodlarla uygulama geliştirebilmek için çok kompleks kodlar yazmak gerekirdi.

Microsoft .Net framework’u ile birlikte gelen 3 teknoloji bu tür uygulamalar geliştirmek için daha az zaman, daha kolay yönetilebilirlik ve daha kolay geliştirme gibi bir çok artı sağladı.

Bahsedilen bu 3 teknoloji

  • XML Web Servisleri
  • Remoting
  • Serviced Components

Bu makalede Remoting uygulamalarının mimarilerini ve geliştirilme süreçlerini inceleyeceğiz.

.NET Remoting Nedir ?

 

Remoting’in ne olduğunu anlayabilmek için öncelikle uygulama etki alanının (application domain) ne olduğunu bilmek gerekir.

.NET’le geliştirilmiş her uygulamanın kendine ait bir application domaini vardır. Application domainin anlamı sizin uygulamanız içersindeki tüm metod, özellik v.b. kendi domaini içersinde çalışmasıdır. Bunun faydası ise uygulamanızın makinenizdeki bir başka uygulamada meydana gelebilecek herhangi bir hatadan etkilenmemesi yada tam tersine sizin geliştirdiğiniz herhangi bir uygulamada ortaya çıkacak bir hatadan diğer uygulamaların etkilenmemesidir. Yani application domain adeta uyguları izole eder. Denetimi ve düzenlemesi ise CLR (Comman Language Runtime) tarafından yapılır.

Günümüzde geliştirilen bir çok uygulama kendi applicaition domain’inden başka domainlerdeki metodlara ihtiyaç duyabiliyorlar. .NET Remoting bize, farklı application domainlerdeki nesnelerin birbirleriyle ilitişim kurabileceği dağıtık uygulamalar geliştirme imkanı sunar. Bu nesneler, bir bilgisayar içersinde ki farklı application domainlerde çalışan nesneler olabileceği gibi network üzerindeki birden çok bilgisayar üzerinde birbirleriyle çalışan nesnelerde olabilirler. Remoting, farklı applicaiton domainlerdeki uygulamaların birbirleriyle iletişim kurabilmeleri ve böylece tek bir uygulamaymış gibi çalışabilmelerini sağlar.

Remoting framework’u şu bileşenlerden oluşur :

  • Farklı application domainlerdeki nesnelerin kendisine erişeceği bir remote nesne
  • Remote nesneyi kullanabilecek bir client nesne
  • Server ve client arasındaki mesajların taşınacağı bir kanal

Remote nesne, client tarafından farklı işlemlerde kullanılabilirler. Ancak remote nesnesindeki metodların adresleri processlere bağlı olduğu için client nesnesi, remote nesnesine direk olarak erişemez. Bu iki nesnenin birbirleriyle haberleşebilmesini sağlamak amacıyla, Remoting sistemi remote nesne için, client processinde bir proxy ouşturur. Bu proxy’nin remote nesneyle tamamen aynı olan bir interface’i vardır ve remote nesne ile client nesne arasında adeta bir aracıdır. Client nesne proxy’i kullanarak, remote nesnenin metodlarına adeta aynı process’in bir parçasıymış gibi kolayca erişebilir.

Client nesne, remote nesnenin bir metodunu çağırdığı an proxy bu çağrıyı client’ın Remoting sistemine iletir. Remoting sisteminin görevi proxy’nin kendisine ilettiği çağrıyı kanal vasıtasıyla server process’e eriştirmektir. Server’ın Remoting sistemi bu çağrıyı aldığı an, erişilmek istenilen remote nesneyi hafızaya alır yada ondan bir instance oluşturur.

Remote nesne client’tan gelen talebi işler ve ona bir cevap üretir. Bu cevap Remoting sistemi tarafından bir mesaj haline getirilerek, kanal üzerinden client’ın Remoting sistemine aktarılır. Sonunda client’ın Remoting sistemi proxy sayesinde gelen mesajı client nesneye iletir.

Remoting Mimarisi

Client nesnenin, server nesnesinin fonksiyonlarına erişebilmesi için server nesnesi remotable olmalıdır. İki tür remotable nesne vardır

  • Marshal-by-Value
  • Marshal-by-Reference

Remotable Nesne

Marshal-by-value : Eğer server nesnesi marshal-by-value (MBV) ise, server’ın Remoting sistemi, server nesnesinin o anki durumunu bitler dizisi haline getirerek client process’ine gönderir. Bu işleme serileştirme (serialization) denir. Client Remoting sistemi tersine bir işlem gerçekleştirilerek bit dizisi haline getirilmiş mesajı eski haline getirerek server nesnesinin bir kopyasını elde eder. Bu andan sonra client server nesnesinin local deki kopyasındaki metodları direk çağırabilir.

Marshal-by-reference : Eğer server nesnesi marshal-by-reference (MBR) ise, server’ın Remoting sistemi, server nesnesinin referansını client nesnesine gönderir. Bundan sonra client nesnesi server nesnesinin metodlarına erişmek için bu referansı kullanır. MBR’da client bir metodu çağırdığında, metod client’da çalıştırılmaz. Bunun yerine client’ın Remoting sistemi çağrıyı server’ın Remoting sistemine, server’ın Remoting sistemide server nesnesine iletir. Server nesnesi gelen çağrıyı işler ve sonucu aynı kanalı kullanarak client nesnesine gönderir.

 

Ahmet HOSO
ahmet.hoso@bilgeadam.com