Remoting 2

Remoting 2

REMOTINGE GENEL BAKIŞ

.Net Remoting esnek ve oldukça genişletilebilir bir mimariye sahiptir. Remoting’in ne işe yaradığını kavrayabilmek için önce Application Domain kavramına bakalım. AppDomain soyut bir yapıdır. Veri ve kodun izolasyonunu sağlar. Bunu yaparken işlemler ve thread’ler gibi işletim sisteminin özel yapılarını kullanmaz. Bir işlem bir çok AppDomain içerebilir, fakat bir AppDomain tam olarak yalnızca bir işlem içindir. AppDomain sınırlarında karşı taraftan mantıksal olarak program çağrıldığında, .Net Remoting bu evrede devreye girer. AppDomain’ne yerleştirilen bir nesneyi göz önüne alalım. Başka bir nesne aynı AppDomain üzerinde değilse, bu nesneyi remote nesnesi olarak düşünebiliriz.

.Net Remoting bazı sınıflar kullanır. Bu sınıflar, karşıdaki uygulama domain’nindeki nesneye ulaşabilmek için temel çekirdeği sağlar. .Net Remoting işleminde, kullanıcı metodları direk olarak çağırmaz. Bunun yerine, uzaktaki nesneyi çağırmak için proxy nesnesini kullanır. Bizim tanımladığımız her public metod , remote nesne sınıfında kullanıcı tarafından çağırılabilir. Kullanıcı uzaktaki metodu çağırdığında, proxy bu çağrıyı alır ve taşır, uygun format kullanarak mesaji kodlar. Gönderilen çağrı, kanallar üzerinden sunucu tarafına gönderilir. Kanalı dinleyen sunucu AppDomain’inin isteklerini toplar. İstenilen nesnelerin yerleşim ve çağrı metodlarının bulunduğu sunucu, bu nesneyi remoting sistemine gönderir. Bu işlem tamamlandığında , bu aşamalar ters çevrilir ve sonuçlar kullanıcıya geri gönderilir.

Remoting framework’un kullandığı iki format vardır; Binary ve SOAP. Binary format oldukça hızlıdır ve kodlama için ikilik sistem kullanır. SOAP formatı binary formatına göre yavaştır.Yavaş olmasına rağmen yazılım geliştiriciye, mesajını SOAP formatında gönderebilmesine olanak sağlar. Bilindiği gibi SOAP formatında kodlamanın temeli XML yapısına dayanmaktadır. Bir standart haline gelen XML sayesinde diğer sistemlerle iletişim kurmak daha kolaydır.

Şekil-1: .Net Remoting Mimarisi

Proxy nesnesi oluşturarak uygulama domain’leri arasında iletişimi sağlarız demiştik Nesneler arasındaki iletişim ve uygulamaların karşılıklı konuşmasında serialization ve deserialization işlemleri uygulanır. Bu işlemler marshaling ile yapılır.

MARSHALLING

Remote edilebilecek nesne, uygulama domain’inde marshall edilebilen nesnedir. Bunun haricinde bilinen tüm nesneler non-remotable nesnelerdir.

İki çesit remote nesnesi vardır:- Marshall by Value (MBV) Nesneleri: Bu yöntemde nesneler kopyalanır ve istemciden sunucuya kopyalanmış nesne gönderilir.- Marshall by Reference (MBR) Nesneleri: Proxy bu nesneleri istemci üzerinden karşı tarafa geçirir. İstemci tarafında nesnenin sadece referansı tutulur.

Marshall by Value Nesneleri (MBV): Bu tip nesneler sunucu üzerinde bulunurlar. Kullanıcı MBV nesnesi üzerinden bir metod çağırdığında, MBV nesnesi sunucu tarafından serialize(belirlenen formatta kodlama) edilerek ağ üzerinden istemciye aktarılır. İstemci gelen nesneyi deserilization (belirlenen formatta kod çözme) işlemine tabi tutarak istediği bilgiyi elde eder.

MBV ağ uzerinde gidip gelmelerin sayısını azalttığı için yüksek performans sağlar. Fakat büyük nesnelerle çalışıldığında, o nesnenin serialize edilip sunucuya gönderilmesi ve istemci tarafında deserialize işlemi yapılması oldukça zahmetlidir.

Seralization özelliğini tanımlayarak MBV nesnesi oluşturabiliriz.

MBV nesnesinin tanımlanması: Public Class CustomerMarshal by Reference Nesneleri (MBR): Uzaktan erişim nesnesidir. Her zaman sunucu üzerinde yerleşir ve bütün metodlar sunucu tarafından işletilen bu nesne üzerinden çağrılır. Sunucu üzerindeki MBR nesnesi ile istemci ilişkisinde, MBR nesnesinin referansını tutan yerel proxy nesnesi kullanılır. MBR nesneleri ile çalışmak ağ üzerinde, sunucudan kullanıcıya, kullanıcıdan ağ trafiğini arttırır. Genellikle, nesne büyük boyutlarda olursa veya nesnenin fonksiyonu yalnızca sunucu tarafında işletilebildiğinde MBR nesnesinin kullanımı seçilir.MBR nesnesini System.MarshalByRefObject sınıfı kullanarak türetebiliriz. MBR remoting nesnesinin tanımlanması:Inherits MarshalByRefObject  

KANALLAR

Kanallar, işlem ve uygulama domaini çerçevesindeki nesnelerin gönderdiği mesajların uzaktaki nesneye gönderilmesini ve diğer nesnelerle iletişimini sağlayan yollardır. Kullanıcı uzaktaki nesneden herhangi bir metodu çağırdığında, metot detaylarıyla birlikte kanalın içinden uzaktaki nesneye transfer edilir. Karşı taraftaki nesneden geri döndürülen herhangi bir sonuç yine aynı kanal üzerinden istemciye ulaşır.

Uzaktaki nesne çağrılmadan önce , sunucu üzerinde kayıtlı en azından bir kanal var mı diye sorgulamayı Remoting FrameWork’u yapar. Benzer şekilde, kullanıcı tarafında uzaktaki nesne ile iletişim kurmadan önce, özel kanalının olup olmadığına bakılır. Eğer uzaktaki nesne bir kanaldan fazla özel kanal imkanı sunuyorsa, istemci bu seçeneklerden kendisine en uygun olanını kullanarak iletişim kurar.

Kanalın yapısına baktığımızda; kanal iki uca sahiptir. Bir ucunda sunucu, diğer ucunda kullanıcı. Sunucu ucunda , sunucu belirli protokoller aracılığı ile belirlenen porttan ağı dinler ve gelen nesneleri kabul eder. Diğer ucundaki istemci yine belirli protokolleri kullanarak belirlenen kanal aracılığı ile bilgiyi sunucuya gönderir.

Kanalda yapılacak işlemlerde belirli arayüzler kullanılır. Kabul edilen nesne tarafında IchannelReceiver arayüzünü, ve gönderilen mesajın üzerinde işlem yapmak içinde IchannelSender arayüzünü kullanırız.

Üç çeşit temel kanal vardır. Bunlar HTTP, TCP, SMTPdir.

HTTP kanalı, mesajın transferi sırasında SOAP formatını kullanır. Bütün mesajlar SOAP formatı içinde gider. Mesaj , SOAP formatının temeli olan, XML şeklinde serialize edilir .

TCP kanalı, binary formatı kullanır. Bütün mesajlar ikili kod şeklinde serialize edilir ve o şekilde transfer edilir.

SMTP mail üzerinden remoting işlemi sağlayan bir kanaldır. Üzerinde fazla durmayacağım .

.Net HTTP ve TCP kanallarını kullanımı hazır olarak sunar. Eğer farklı kanallar kullanmak istersek, kendi kullacağımız kanalı IchannelReceiver ve IchannelSender arayüzlerini kullanarak tanımlayabiliriz.

HTTP KanalıBu kanal kullanırken, uygulamalar System.Runtime.Remoting.Channels.Http namespaceinin sınıflarını kullanır. HTTP Channel Sınıfları:HttpServerChannel: IchannelReceiver::HTTP’yi kullanarak gelen mesajları server uygulamarı için kabul eder.HttpClientChannel: IchannelSender: HTTP’yi kullanarak client uygulamaları için mesaj gönderir. IChannelReceiver ve IchannelSender: Kanalın iki ucu olan sunucu ve kullanıcı tarafı için kombine uygulama sağlar.

  Dim kanal As HttpChannel = New HttpChannel(8085)         ChannelServices.RegisterChannel(kanal)TCP Kanalı

TCP kanalı uygulamalarında, System.Runtime.Remoting.Channels.Tcp namespace’sindeki sınıfları kullanır.

TCP Channel SınıfıTcpServerChannel: IchannelReceiver. TCP kanalında mesajları kabul ederek sunucu tarafında uygulanmalar sağlar.TcpClientChanel. IchannelSender: TCP kanalına mesaj göndererek kullanıcı tarafında uygulamalarda kullanılmasını sağlar.TcpChannel: IChannelReceiver ve IchannelSender. TCP kanalında hem server hem client tarafında ortak kullanılan fonksiyonlar sunar .

  Dim kanal As TcpChannel = New TcpChannel(8050)         ChannelServices.RegisterChannel(kanal)

HTTP ile TCP Kanal Arasında Seçim Yapmak Intranet üzerinde, güvenlik riskinin fazla olmadığı yerlerde TCP kanalı kullanılır. Geniş ölçüde erişim gereken uygulamalarda verimlilik ve güvenlik açısından HTTP kanalı kullanılır. .

Güvenlik : .NET ile dahili gelen bir güvenlik mekanizması yoktur. Güvenlik nesneyi sunan sunucu tarafından kontrol edilir. Uzaktan erişimli nesnelere dahili bir güvenlik mekanizması sunan tek sunucu IIStir. Bu yüzden tüm önemli nesneler IIS üzerinden yayınlanmalıdırlar.

Karşılaştırma: 1-Firewalllar genellikle HTTP iletişine blok koymaz. TCP kanalı ise, internet üzerinde yaptığı herhangi bir işlemde güvenlik açıklarına sebep olabilir. Bu yüzden kullanım alanı daha dardır.

2-HTTP kanalı kullanımı verimliliği azaltır.. Bunun sebebi, HTTP protokolüyle gelen ek yüklerdir. TCP ise HTTPye oranla daha verimli çalışır. Çünkü TCP ağ üzerinde bilgi transferi için ek yük getirmeyen ham soketleri kullanır.3-Güvenlik açısından baktığımızda, nesne IIS’in içine yerleştirildiğinden, HTTP’in güvenliği oldukça fazladır. TCP de ise güvenliğin ayrı bir konu olarak işlenmesi gereklidir. Uygulamalarda özel güvenlik yöntemleri kullanmak için System.Securtiy namespaceinden faydalanılır.

FORMATTERS

Formatters; mesajın kanal üzerinde transferinden önce , serialize edilerek belirlenen formatta kodlanmış hale dönüştürme işleminde kullanılır. Kanalın diğer ucuna mesaj belirlenen formatta iletildiğinde, aynı formatta kod çözme işlemine tabi tutularak istenen bilgi elde edilmiş olur. Formatter sınıfları .Net Remoting Framework içinde IFormatter arayüzü ile eklenmiştir. .Net Framework Binary formatter sınıfı ve SaopFormatter sınıfı olan iki format sınıfına sahiptir. Eğer farklı bir format çeşidi kullanmak istersek, istediğimiz formatı Iformatter arayüzünü kullarak tanımlayabiliriz.

SOAP FormatterGenişletilebilir ve modüler bir protokol olan SOAP protokolü, uygulamalar arasında yaptığı işlemleri XML tabanlı olarak yapar. SOAP üzerinde, HTTP veya TCP gibi transfer mekanizmalarının sınırlamaları yoktur.

SOAP formatını için System.Runtime.Serialization.Formatters.Soap namespacesi’ndeki SoapFormatter sınıfı kullanılır.

Bu formatter uyumsuz yapıdaki uygulamalar arasında iletişimi sağlamak için en ideal yoldur.Binary formatıyla karşılaştırıldığında, mesajı göstermek için Binary formatından daha fazla bellek alanına ihtiyaç duyar.

BINARY FormatterMesajların gönderilmesinde binary format hız açısından daha performanslıdır. Binary formatı System.Runtime.Serialization.Formatters.Binary namespacesi’ndeki BinaryFormatter sınıfı kullanılarak uygulanır.

KANALLAR VE FORMATLARHTTP kanalının mesaj transferinde varsayılan formatı SOAP formatıdır. HTTP kanalı, SoapFormatter sınıfı içinde mesajı serialize ve deserialize yapmak için SoapClientFormatterSinkProvider ve SoapServerFormatterSinkProvider sınıflarını kullanır.

TCP kanalı uzaktaki nesne ile mesaj transferinde varsayılan değer olarak binary formatını kullanır. Binary sınıfı içinde mesajı serialize ve deserialize etmek için BinaryClientFormatterSinkProvider ve BinaryServerFormatterSinkProvider sınıflarını kullanır.

Belirtiğim bu özelliklerin yanı sıra, bu kanallar istediğimiz şekilde yapılandırılabilir. HTTP kanalı SOAP formatı yerine Binary formatında veya istenen özel bir formatta ayarlanarak kullanılabilir. Aynı şekilde TCP kanalları Binary formatı yerine SOAP formatını kullanacak şekilde veya istenen özel bir formata ayarlanabilir.

HTTP kanalları SOAP formatı ile maksimum birlikte işlerliği sağlarken, TCP kanalıyla birlikte Binary formatının kullanılması da maksimum verimi sağlar.

Üçüncü bölümde nesnelerin çalışma modlarını inceleyeceğiz.

Döküman Arama

Başlık :

Kapat