Makale 9: Bir istemci uygulamasının oluşturulması ve yapılandırılması

Giriş

Daha önceki makalelerde Remoting server’larını nasıl configure ettiğimizi, Remotably Type’ları nasıl host ettiğimizi ve bir Remoting server’ını build edip sonrasında da bu uygulamanın nasıl çalıştırıldığını öğrendiniz. Bu chapter’da ise çalışmakta olan Remoting server’a bağlanacak ve Remoting server üzerinde host edilen Remotable Type’ların instance’larını create ederek remote object’leri kullanacak olan Remoting client’ları üzerine bilgiler edineceğiz.

Bu chapter sonunda aşağıdaki konular hakkında bilgi sahibi olacağız;

  • Remote object’lerin nasıl create edileceğini ve kullanılacağını bileceğiz.
  • Remoting client’ı olarak çalışan bir uygulamayı programmatic olarak configure edebileceğiz.
  • Remoting client’ı olarak çalışan bir uygulamayı configuration file’ı kullanarak configure edebileceğiz.
  • Remoting client’ı olarak çalışan bir uygulamayı nasıl build edip çalıştıracağımızı bileceğiz.

Bir Remote Object Oluşturmak

Remote object’ler Remoting server’ı üzerinde Remotable Type olarak tanımlanmış olan ve Remoting client tarafında instance’ı create edilerek kullanılabilecek olan object’lerdir ve Remoting server’ının configuration’ında belirtilen URL’den erişilebilirler.

Remote object’ler Remoting server’ı üzerinde register edilmeden önce karar verilmesi gereken nokta remote object’in server üzerinde mi yoksa client üzerinde mi çalışması gerektiğidir. Remoting server üzerinde çalışan remote object’lere Server Activated Object ismi verilmektedir. Yine Remoting server’ında çalışan fakat yalnızca client’ın request etmesi durumunda create edilen remote object’ler ise Client Activated Object olarak isimlendirilir.

Server Activated Object

Server Activated Object’ler tamamı ile Remoting server üzerinde bulunan, tüm işlemlerini server üzerinde yapan ve Remoting client’ında ise sadece referansı tutulan remote object’lerdir. Remoting configuration file’ı içerisinde <wellknown> node’u içerisinde tanımlanan remotable type’lar Server Activated Object seçeneği ile tanımlanmış type’lardır. Programmatic olarak configure edilen Remoting uygulamalarında ise aşağıdaki method’lar kullanılarak register edilirler.

Client / Server


Method
Client RemotingConfiguration.RegisterWellKnownClientType
Server RemotingConfiguration.RegisterWellKnownServiceType

Remoting server üzerinde bulunan Server Activated Object instance’ına erişmek için System namespace’i içerisindeki Activator class’ının static olaran tanımlanmış olan GetObject method’u kullanılır.

Örneğin, Chapter 1’de yazmış olduğumuz Remoting server’ında host edilen MyRemotableType tipindeki object’e erişmek için aşağıdaki kod kullanılır.

Remoting server’da host edilen object instance’ına erişilmesi

IMyRemotableType myObject = (IMyRemotableType)Activator.GetObject
    (typeof(IMyRemotableType), "tcp://localhost:4444/MyRemotableType.rem");

Server Activated Object’lerin programlanması sırasında dikkat edilmesi gereken en önemli configuration Remoting server’ı üzerinde yapılan ve object’in register edildiği configuration’dır. Bu configuration sırasında, daha önceki örneklerimiz sırasında Singleton olarak kullanmıştık, iki opsiyon bulunmaktadır. Bunlar Singleton ve SingleCall opsiyonlarıdır.

Singleton Instance

Singleton olarak configure edilen object’ler sunucu üzerinde ilk initialize edilmeleri sonrasınta life-time’ları boyunca saklanırlar ve bu object’i herhangi bir Remoting client’ının request etmesi durumunda sunucu hazır halde bulunan object’i geri döndürür ve ya hazır durumda bir object bulunmuyorsa yeni bir instance create edip geri döndürerek bu object’i daha sonraki Remoting client request’leri için saklar. Dolayısı ile Singleton olarak instance’ı oluşturulan object’ler sunucu üzerinde sadece bir instance’a sahiptirler.

SingleCall Instance

SingleCall olarak configure edilen object’ler Remoting client’ın her request’i sonrasında yeniden oluşturulurlar ve Remoting client’a geri döndürülürler. Yani iki farkli Remoting client’ın aynı object’i kullanması mümkün değildir.

Client Activated Object

Client Activated Object’ler de aynen Server Activated Object’ler gibi Remoting server’ı üzerinde host edilen ve client tarafında sadece referansı bulunan remote object’lerdir. Tek farklılık ise Client Activated Object’lerin yalnızca client istediği taktirde oluştuturulmasıdır.

Remoting configuration file’ı içerisinde <activated> node’u içerisinde tanımlanan remotable type’lar Client Activated Object seçeneği ile tanımlanmış type’lardır. Programmatic olarak configure edilen Remoting uygulamalarında ise aşağıdaki method’lar kullanılarak register edilirler.

Client / Server


Method
Client RemotingConfiguration.RegisterActivatedClientType
Server RemotingConfiguration.RegisterActivatedServiceType

Remoting server üzerinde bulunan Client Activated Object instance’ına erişmek için System namespace’i içerisindeki Activator class’ının static olaran tanımlanmış olan CreateInstance method’u kullanılabildiği gibi, programmatic configuration tamamlandıktan ve Client Activated Object’ler register edildikten sonra object’in type’ındaki herhangi bir class’ın new keyword’ü ile yeni bir instance’ının oluşturulması durumunda da client activation devreye girecek ve remote object Remoting server üzerinde oluşturularak client’a referansı gönderilecektir.

Örneğin, tcp://localhost:1234/MyRemotableType.rem adresinde bulunan Client Activated Object’in yeni bir instance’ına erişme işlemi şu seçeneklerle yapılabilir.

UYARI

Aşağıdaki kod örneklerinden önce remoting configuration’ının programmatic olarak ve ya configuration file kullanılarak configure edilmesi ve MyRemotableType type’ındaki remotable type’ın tcp://localhost:1234/MyRemotableType.rem URL’inde bulunduğunun belirtilmesi gerekir.

Remoting server’da host edilen client activated object instance’ına erişilmesi – Yöntem 1

MyRemotableType myObject = (MyRemotableType)Activator.CreateInstance
    (typeof(MyRemotableType));

Remoting server’da host edilen client activated object instance’ına erişilmesi – Yöntem 2

MyRemotableType myObject = new MyRemotableType();

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *