Home Contact RSS

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();

Leave a Comment