.NET Remoting Mimarisi - 2

.NET Remoting Mimarisi - 2 Transfer Kanallarının KullanımıKanallar uzak nesnelerin birbirleri ile konuşabilmelerini sağlarlar. Kanallar kullanılarak bir uygulama bölgesindeki bir uygulamanın diğer bir uygulama bölgesindeki uygulama ile konuşabilmesini sağlar.Bu uygulama bölgeleri başka bilgisayarlarda olabilirler. Ayrıca bu kanallar uygulamaların mesaj alış verişi için TCP ve HTTP protokollerini kullanırlar.Kanallar remoting sınırları içerisindeki mesaj taşıyıcılarıdır. Kanalın sonundaki uçlar (sınırlar) kanaların bitiş noktalarını oluşturur.Bir nesne uzaktaki diğer nesneye mesaj göndermeden önce kanal mesajı XML veya binary olarak uygun formata çevirir.Kanal Arayüzleri.NET Framework kanaları ve kanallar için arayüzleri System.Runtime.Remoting.Channels namespace’i içerisinde saklamaktadır. Tüm kanallar IChannel arayüzünü uygularlar. IChannel arayüzü ChannelName ve ChannelPriority gibi özellikler sağlar. Kanalları mesaj almak veya göndermek için kullandığınıza bağlı olarak sunucu (alıcı) ve istemci (gönderici) olarak kategorilenmiştir. Bir sunucu kanal IChannelReceiver arayüzünü uygular, istemci kanal ise IChannelSender arayüzünü uygular. IChannelReceiver arayüzü StartListening ve StopListening gibi metodların uygulanmasını zorunlu kılar.IChannelSender arayüzü CreateMessageSink isminde bir metodun uygulanamasını zorunlu kılar. CreateMessageSink metodu kanalın mesajı uzak nesneye iletirken kullanabilmesi için bir mesaj oluşturur ve onu döndürür.HttpServerChannel ve TcpServerChannel sınıfları IChannelReceiver arayüzünü uygularlar. HttpClientChannel ve TcpClientChannel sınıfları ise IChannelSender arayüzünü uygularlar. Bir sınıf IChannelSender ve IChannelReceiver arayüzlerinin ikisinide uygulayarak hem mesaj göndermeyi hemde mesaj almayı sağlayabilir. HttpChannel ve TcpChannel sınıfları IChannelSender ve IChannelReceiver arayüzlerini uygulayarak hem mesaj göndermeyi hemde mesaj almayı sağlarlar. Kanalları KaydetmekBir nesne uzaktaki diğer bir nesneye mesaj göndermeden önce istemci kanalını remoting sistemini kaydetmiş olmanız gerekmektedir. Benzer şekilde uzaktaki nesnenin mesajları alabilmesi için sunucu kanalını remoting sistemine kaydetmiş olmanız gerekmektedir. Bir kanalın remoting sistemine kayıt edilebilmesi için ChannelServices sınıfını kullanılması gerekir. ChannelServices sınıfı kanalların kaydedilebilmesi için shared(static) metodlar içerir. Aşağıdaki kod parçası 5010 portunu dinleyen bir TcpServerChannel kanalını remoting sistemine kaydeder.Dim kanal as New TcpServerChannel(5010)ChannelServices.RegisterChannel(kanal)Kanalları istemci veya sunucu bilgisayarda kaydettikten sonra uzak nesnelerdeki metodlar çağırılabilirler.Remoting için Kanalları SeçmekBir istemci nesnesi uzak nesnedeki metodları çapırdığı zaman kanallar parametre ve diğer ilgili bilgileri uzakdaki nesneye iletir. Bir istemci, istemci bilgisayarda kaydedilmiş olan herhangi bir kanalı kullanarak uzaktaki nesnenin metodlarını çağırabilir.Uzak nesnelere erişmek için kanal seçerken şu kurallara uymak gerekmektedir.  Bir istemci uzaktaki nesnenin bir metodunu çağırmadan önce mutlaka HttpClientChannel yada TcpClientChannel sınıflarından türemiş bir kanalı remoting sistemine kaydetmiş olmalıdır. Aynı şekilde bir uzak nesneyi sunabilmek içinde bir sunucu kanalı kaydedilmiş olmalıdır. Sunucu kanalı geriye bir metod çağrısı dönüyor ise istemci uygulamada bir sunucu kanalı kaydedilmiş olmalıdır. Aynı uygulama bölgesindeki kanalların isimleri aynı olamaz. Ancak bir uygulama bölgesi aynı türde birden fazla kanal içerebilir. Bu kanalları ayırmak için tekil isimler verilir. Bir bilgisayarda kaydedilmiş olan iki kanal aynı portu dinleyemez. Bir port ancak tek bir kanal tarafından kullanılabilir. 

Bir istemci uzak bir nesnenin metodunu çağırdığı zaman remoting altyapısı parametreleri ve diğer bilgileri içeren bir mesaj oluşturur.Parametre bilgilerinin ve çağrı ile ilgili diğer bilgilerin bir mesajın içerisine paketlenmesi içerisine marshaling denir.Paketlenen bu mesaj kanal aracılığı ile sunucu sisteme transfer edildikten sonra sunucudaki remoting sistemi tarafından bu paket açılır. Bu işleme unmarshaling denir. Açılan paketdeki parameter ve diğer bilgiler sunucudaki nesnenin metoduna aktarılır ve bu metod işletilir.Mesaj paketini taşıyan kanal farklı protokolleri kullanabilir. Bunlar HTTP ve TCP. Kullanılan transfer protokolüne bağlı olarak kanallar iki namespace’e bölünmüştür. System.Runtime.Remoting.Channels.Http ve System.Runtime.Remoting.Channels.Tcp namespaceleri kullanılan kanal türüne göre projeye eklenmelidir. 

HTTP KanalıSystem.Runtime.Remoting.Channels.Http namespace’i uzak nesneler arasında mesaj transferi için HTTP protokolünü kullanan kanal sınıflarını içerir. Bu namespace HttpClientChannel, HttpServerChannel ve HttpChannel gibi HTTP kanal sınıflarını içerir. Mesajları istemciden uzaktaki nesneye transfer etmek için HttpClientChannel sınıfını kullanabilirsiniz. HttpClientChannel nesnesi oluşturmak ve kaydetmek için aşağıdaki kod parçasını kullanabilirsiniz.ChannelServices.RegisterChannel(New HttpClientChannel())HttpServerChannel kanalı uzak nesnenin çağrıları dinleyebilmesini sağlar. Bir HttpServerChannel kanalını belli bir port için kayıt etmeniz gerekir. Aşağıdaki kod parçası 8080 portunu dinleyen bir HttpServerChannel kanalının nasıl oluşturulduğunu gösterir.Dim kanal as New HttpServerChannel(8080)ChannelServices.RegisterChannel(kanal)Mesajları uzak nesneler arasında gönderip almak için HttpChannel sınıfını kullanabilirsiniz. Aşağıdaki kod parçası 8080 portunu dinleyen bir kanal oluşturur ve remoting sistemine kayıt eder.Dim kanal as New HttpChannel(8080)ChannelServices.RegisterChannel(kanal) 

HTTP kanallarını uzak nesnelerin birlikte çalışabilirliği söz konusu olduğu zaman kullanılması gerekli olan kanallardır. HTTP kanalları mesajı kanal üzerinden transfer etmden önce XML biçimine çevirmek için SoapFormatter sınıfını kullanılar. XML tabanlı bu biçim sayesinden istmeci uygulama .NET ortamında yazılmış bir client olmasa ile rahatlık ile uzak nesne ile göreşebilir.Performansın birinci unsur olduğu durumlarda ise mesajların kanallardan binary olarak transfer edilmesi tercih edilir. System.Runtime.Remoting.Channels.Tcp aduzayı mesajların TCP üzerinden transferi için gerekli sınıfları sunar.TCP KanalıTCP kanalları mesajları TCP üzerinden uzak nesneler arasında transfer etmeye olanak sağlar. TCP kanalları mesajlar uzak nesneye gönderilmeden önce onları serialize etmek için BinaryFormatter sınıfını kullanır. Ayrıca mesajı sunucu nesneye iletmeden önce BinaryFormatter sınıfı ile mesajı deserialize eder. TCP kanalları için kullanacağınız sınıflar şunlardır. TcpClientChannel, TcpServerChannel, TcpChannel. TcpClientChannel ile uzak nesneye mesaj gönderilir. TcpServerChannel ile ise uzak nesnenin istemcilerden mesaj kabul etmesi sağlanır. TcpChannel sınıfı ise mesajları uzak nesneler arasında alıp verebilmeyi sağlar. TCP kanallarını aynı HTTP kanallarını kaydettiğiniz şekilde kaydedebilirsiniz. Aşağıdaki kod parçası bir TCP kanalllarını remoting sistemine kaydetmeyi örneklendirmektedir.ChannelServices.RegisterChannel(New TcpClientChannel())Dim kanal as New TcpServerChannel(8070)ChannelServices.RegisterChannel(kanal)Dim tcpkanal as New TcpChannel(8010)ChannelServices.RegisterChannel(tcpkanal) 

Eğer uzaktaki nesne istemciden mesaj almak için TcpChannel ve TcpServerChannel sınıflarını kullanıyorsa istemci bu uzak nesneye bağlanmak için TcpChannel yada TcpClientChannel sınıfını kullanmalıdır. Eğer istemci HttpClientChannel veya HttpChannel sınıflarını kullanıyorsa uzak nesne ise TcpChannel veya TcpServerChannel sınıfları ile sunuluyorsa istisnai durum (exception) oluşur. Oluşan istisnai durumun vereceği mesaj şudur : "The underlying connection was closed: An unexpected error occurred on a receive."  

HTTP Kanalları

Tcp Kanalları

Sunucu ve istemci arasındaki mesajları HTTP protokolü ile transfer eder.

Sunucu ve istemci arasındaki mesajları TCP protokolü ile transfer eder.

Mesajların serializayonu için SoapFormatter sınıfını kullanır.

Mesajların serializasyonu için BinaryFormatter sınıfını kullanır.

Belirlenen sunucuda varsayılan olarak iki bağlantı oluşturulur. clientConnectionLimit özelliğini değiştirerek bu sayı değiştirilebilir.

Ne kadar istek gelirse o kadar bağlantı oluşturulur. Soket bağlantıları bağlantı 15-20 saniye pasif kaldığı zaman kapanır.

Bu ünitede remoting temellerini, nesne aktivasyon yöntemlerini kanalları ve kullanımlarını öğrendiniz. Kanallar mesajları sunucu ve istemci arasından transfer ederler. Bu kanallardan hangisini kullanacağınıza uygulamanızın türüne ve durumuna göre karar vermeniz gerekmektedir.

Döküman Arama

Başlık :

Kapat