Makale Özeti

Makale dizimizin ikinci bölümde Aktivasyon, (SingleCall ve Singleton nesneler), Proxy ve Kanallardan bahsedilecektir.

Makale

Microsoft .NET Remoting Framework - Part II

İkinci bölümde Aktivasyon, SingleCall ve Singleton nesneler, Proxy ve Kanallardan bahsedilecektir.

Aktivasyon

Remote bir nesne oluşturduğunuzda, nesnenin oluşturulma ve başlatılmasını belirlemeniz gerekir. Nesnenin oluşturulması ve başlatılmasına aktivasyon denir. Remote bir nesneye client’lardan erişilmeden önce Remoting sistemi, remote nesnenin nasıl aktive edileceği ile ilgili bilgilendirilmelidir. İki tür aktivasyon vardır : Serverda  Aktif Olan Nesneler ve Clientda Aktif Olan Nesneler 

Serverda Aktif Olan Nesneler (Server-Activated Objects): Eğer ki remote nesne server’in adres alanında bulunuyor, proxy’den referans vasıtasıyla erişiliyorsa ve yine remote nesne MarshalByRefObject class’ını inherit ediyorsa bu nesneye serverda aktif olan nesne (SAO) denilir. Sadece marshal-by-reference (MBR) nesneler remotedan aktive edilebilirler; client’larsa bu nesneye proxy’deki referans sayesinde erişebilirler.

Server application domain’i SAO’yu, client new fonksiyonunu kullanarak bir instance oluşturduğunda değil sadece client, nesnedeki bir metodu çağırdığında oluşturur. Client SAO’nun bir instance’ını istediğinde server application domaininde nesnenin bir instance’ını oluşturmak yerine client application domain’inde bir proxy oluşturur.

SAO’lar için iki tane aktivasyon modu vardır : SingleCall ve Singleton

SingleCall : Bir SingleCall nesne için client’ın her talebinde yeniden bir instance oluşturulur. Client’tan gelen her bir talebe başka bir instance cevap verir. Oluşturulan bu instace’lar belli aralıklarla garbage collector tarafından temizlenir. Ancak garbage collector bu temizliği yapıncaya kadar instance’lar hafıza da yer işgal etmeye devam ederler. SingleCall nesneler stateless (durumunu koruyamayan), ve kendi durumlarını saklamayan nesnelerdir. Zaten client’ın her bir isteğine karşılık yeni bir instance oluşturulmasının nedeni de SingleCall nesnelerin stateless olmalarıdır.

Singleton : Singleton nesnelerin serverda bir anda sadece bir tane instance’ı bulunur. Client’tan talep geldiğinde eğer yaşayan bir instance varsa client’ın tüm taleplerine bu instance cevap verir. Eğer yaşayan bir instance yoksa bu durumda server bir instance oluşturur ve client’lardan gelen tüm isteklere bu yeni instance cevap verir.

SingleCall Nesne

Singleton Nesne

Sadece bir talebe cevap verir ve imha edilir.

Birden çok client’a ve birden çok talebe cevap verebilir

Talepler arasında durumunu saklamaz

Talepler arasında durumunu muhafaza eder

Her talep için yeniden oluşturulur

Eğer ki instance yoksa yeniden oluşturulur.

Clientda Aktif Olan Nesneler (Client-Activated Objects) : Bu nesnelerin temelinde her client’ın farklı bir remote nesne instance’ı ile çalışması yatar. Bu tip bir durumda, yani her client’ın kendi instance’ı ile çalışması gerektiği bir uygulamada, clientda aktif olan nesne (CAO) kullanabilirsiniz. CAO’lar client’ın talebine göre aktive edilen remote nesnelerdir. Client aktivasyonu ile birlikte, client remote nesnenin instance’ını oluşturmaya çalıştığında, client’la server arasında çift yönlü bir iletişim gerçekleşir.

Client remote nesnesini talep ettiğinde, remote uygulama client’a bir aktivasyon mesajı gönderir. Server istenilen class’ın bir instance’ını oluşturur ve bu class’daki metodları çalıştırabilecek bir nesne referansını client’a gönderir.Client’da bir proxy oluşturur.

Bir CAO, kendi client’ı içersinde metodların çağrılmasıyla alakalı durum bilgilerini saklayabilirken bunu başka client’lar üzerinde yapamaz. CAO nesnesinin yaşam süresi client uygulama tarafından belirlenir.

Aşağıdakilerin client tarafından yapılması istenildiğinde CAO’lar kullanılabilir :

  • Herkese açık olmayan remote nesneler oluşturma
  • Nesnenin oluşturulması  ile ilgili tüm kontrol
  • Nesnenin yaşam süresiyle ilgili tüm kontrol

Proxy

Client nesnesi, server nesnesini aktive ettiğinde client process’inde bir proxy oluşturur. Proxy, server nesnesi ve server nesnesine erişen client nesnesi arasında adeta bir temsilci gibi davranır. Bu sayede server nesnesi client nesnesine local bir nesneymiş gibi görünür.

Nesne Yaşam Süresi

Eğer server nesnesi bir MBR nesne ise, client nesnesinin server nesnesiyle işi bittiğinde yani artık referans vermediğinde Remoting sisteminin nesneyi hafızadan temizleyebilmesi için bir yönteme ihtiyacı var. Bu maksatla, Remoting sistemi server nesnesinin ömrünü belirlemek amacıyla adeta bir kira kontratı tanımlar. Bu kontrat, server nesnesinin varlığını sürdürebilmesi için peryodik olarak yenilenir. Kontrata belirlenen süre dolduğunda garbage collector server nesnesini temizler. Server nesnesinin ömrü programatik olarak yada hazırlanacak konfigürasyon dosyalarılya belirleyebilenebilir.

Kanal

Kanal, client ve server nesnesi arasında mesaj taşır. Kanal iki port arasında sanal bir yoldur yani kanalın bir ucunda client nesnesi diğer ucunda server nesnesi vardır. Kanal mesajların iletilmesi alınması için kullanılacak protokolü ve port numarasını belirleyebilirler. Remoting varsayılan olarak, Transmition Control Protocol (TCP) ve Hypertext Transfer Protocol (HTTP) olmak üzere iki protokole destek verir. İletişim için HTTP kullanan kanallara HTTP’i kanalları, TCP kullanan kanallara TCP kanalları denilir.

HTTP Kanalları : Eğer iletişiminizi internet üzerinden yapacaksanız, firewall dediğimiz güvenlik sistemlerine takılmamak için HTTP kanalları kullanmalısınız. Buna ek olarak, HTTP kanalları HTTP server’ları üzerindeki güvenlik ayarlamalarını kolaylıkla kullanabilir. Örneğin HTTP Server, Internet Information Service (IIS), Secure Sockets Layer (SSL) ve Windows authentication kullanıyorsa kanalda rahatlıkla bu güvenlik ayarlarına göre davranabilir. HTTP’nin dezavantajı, TCP protokolü kadar yetenekli olmamasıdır.

TCP Kanalları : Eğer iletişiminizi intranet üzerinden yapacaksanız, client’la server arasında iletişimi sağlamak için firewall’da özel portlar tanımlayabileceğinizden TCP kanalları kullanmalısınız. Buna ek olarak, eğer daha güvenli bir çözüme ihtiyacınız varsa .NET framework’nu kullanarak üzerine kendi güvenlik sisteminizi yazmanız gerekir.

Dim chn As TcpServerChannel = New TcpServerChannel(1453)

ChannelServices.RegisterChannel(chn)

 

HTTP Kanalları

TCP Kanalları

Internet üzerinden iletişim için kullanılır

Intranet üzerinden iletişim için kullanılır

HTTP server üzerinde tanımlanmış güvenlik düzenlemelerini kullanabilir.

.NET framework’ü üzerine kendi güvenlik mekanizmanızı geliştirmelisiniz

İletişim açısından daha az yeteneklidir

İletişim açısından daha yeteneklidir

 

Ahmet HOSO
ahmet.hoso@bilgeadam.com