| Editor Login | Register | ||
| > Akademik İnternet ® > .Net FrameWork |
|
|
| .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ı Kaydetmek Bir 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çmek Bir 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. HTTP 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. 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."
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. |
|
| Bağlantılar: bilgininefendisi.net |
| Open Source Document Project | AUP&TOS |