Makale 2: Sunucu Uygulaması Kanalları
Remoting Channel’ları
Remoting server’ları ve Remoting client’ları karşılıklı olarak farklı protokoller üzerinde haberleşme şansına sahiptir ve bu protokoller Remoting kapsamında “channel” olarak isimlendirilmektedir. Channel’lar ile ilgili tüm class ve interface’ler System.Runtime.Remoting.Channels namespace’i içerisinde bulunmaktadır.
.NET Framework içerisinde, hazır olarak kullanılabilir halde üç tipte channel bulunmaktadır. Bu channel’lar şu şekildedir;
- System.Runtime.Remoting.Channels.Http namespace’i içerisinde yer alan HTTP (Hyper Text Transfer Protocol) protokolünü kullanan channel’lar.
- System.Runtime.Remoting.Channels.Tcp namespace’i içerisinde yer alan TCP (Transmission Control Protocol) protokolünü kullanan channel’lar.
- System.Runtime.Remoting.Channels.Ipc namespace’i içerisinde yer alan IPC (Interprocess Communication) protokolünü kullanan channel’lar.
Channel’lar üç farklı tipteyken, protokollerin içerisinde bulunan channel sayısının üçten fazla olmasının sebebi Remoting server’larının ve Remoting Client’larının farklı channel’lardan türetiliyor olmalarıdır.
Daha detaya inersek, Remoting server’ları System.Runtime.Remoting.Channels.IChannelReceiver interface’ini implement eden herhangi bir class olmalıyken, Remoting client’ları da System.Runtime.Remoting.Channels.IChannelSender interface’ini implement eden herhangi bir class olmalıdır. Bununla birlikte System.Runtime.Remoting.Channels.IChannelReceiver ve System.Runtime.Remoting.Channels.IChannelSender interface’lerinin her ikisini birden implement ederek hem Remoting client’ı üzerinde hem de Remoting server’ı üzerinde çalışabilecek bir channel oluşturulabilir.
Verdiğimiz detaylardan yola çıkarak System.Runtime.Remoting.Channels.Http, System.Runtime.Remoting.Channels.Tcp ve System.Runtime.Remoting.Channels.Ipc namespace’leri içerisinde bulunan ve channel olarak kullanabileceğimiz class’ları görelim.
Class | Açıklama | Implements | Channel Type
|
System.Runtime.Remoting.Channels.Http namespace’i içerisinde bulunan channel’lar: |
|||
HttpClientChannel | Yalnızca Remoting client’ları kullanabilir ve işlemlerini HTTP protokolünü kullanarak gönderir. | IChannelSender | HTTP |
HttpServerChannel | Yalnızca Remoting server’ları kullanabilir ve işlemlerini HTTP protokolünü kullanarak cevaplar. | IChannelReceiver | HTTP |
HttpChannel | Hem Remoting server’ları hem de Remoting client’ları tarafından kullanılabilir ve işlemlerinin tamamını HTTP protokolünü kullanarak gerçekleştirir. | IChannelSender, IChannelReceiver | HTTP |
System.Runtime.Remoting.Channels.Tcp namespace’i içerisinde bulunan channel’lar: |
|||
TcpClientChannel | Yalnızca Remoting client’ları kullanabilir ve işlemlerini TCP protokolünü kullanarak gönderir. | IChannelSender | TCP |
TcpServerChannel | Yalnızca Remoting server’ları kullanabilir ve işlemlerini TCP protokolünü kullanarak cevaplar. | IChannelReceiver | TCP |
TcpChannel | Hem Remoting server’ları hem de Remoting client’ları tarafından kullanılabilir ve işlemlerinin tamamını TCP protokolünü kullanarak gerçekleştirir. | IChannelSender, IChannelReceiver | TCP |
System.Runtime.Remoting.Channels.Ipc namespace’i içerisinde bulunan channel’lar: |
|||
IpcClientChannel | Yalnızca Remoting client’ları kullanabilir ve işlemlerini IPC protokolünü kullanarak gönderir. | IChannelSender | IPC |
IpcServerChannel | Yalnızca Remoting server’ları kullanabilir ve işlemlerini IPC protokolünü kullanarak cevaplar. | IChannelReceiver | IPC |
IpcChannel | Hem Remoting server’ları hem de Remoting client’ları tarafından kullanılabilir ve işlemlerinin tamamını IPC protokolünü kullanarak gerçekleştirir. | IChannelSender, IChannelReceiver | IPC |
Tablo 3.1.1: .NET Framework içerisinde bulunan hazır Remoting Channel’ları.
UYARI
System.Runtime.Remoting.Channels.Http, System.Runtime.Remoting.Channels.Tcp ve System.Runtime.Remoting.Channels.Ipc namespace’leri, üzerinde çalıştığınız projenizde System.Runtime.Remoting assembly’sine referans vermediğiniz sürece ulaşılamayacaktır. Bu sebeple projenizin Add Reference bölümünü kullanarak bu assembly’i reference olarak eklemeniz gerekmektedir.
Bu üç protokolün kullanım açısından çeşitli avantajlar ve dezavantajlar sunmaktadırlar. HTTP protokolü kullanılması şu avantajlar ve dezavantajları beraberinde getirmektedir;
- Remoting server’ı ve client’ları farklı lokasyonlarda, örneğin server ve client’ların birbirine LAN (Local Area Network) ile değil de Internet gibi herhangi bir WAN (Wild Area Network) ile bir ağ üzerinden bağlı olması durumunda paketlerin firewall ve ya benzeri güvenlik sistemleri tarafından engellenme riski çoğunlukla yoktur.
- HTTP protokolü üzerinde çalışacak Remoting uygulamalarının IIS gibi sunucular üzerinden çalıştırılması sağlanabilir.
- Sunucu üzerinde Windows Authentication ve ya SSL (Secure Socket Layer) kullanılması durumunda network güvenliği başka bir gereksinime ihtiyaç duyulmadan sağlanabilir.
- HTTP protokolü aynı anda çok fazla request gelmesi durumunda işlemlere geç cevap verebileceği için sistemin yoğun olduğu durumlarda yavaş çalışabilir.
- HTTP protokolü üzerinden transfer edilecek olan mesajlar ekstra header bilgilerinin yüklenmesinden dolayı yavaşlıklara sebep olabilir.
TCP protokolünün kullanılması durumunda ise şu avantaj ve dezavantajlara sahiptir;
- TCP protokolü daha alt seviye paketleri algılayabildiği için network trafiğini önemli ölçüde az kullanacaktır ve bu da sistem hızını arttıracaktır.
- Özellikle LAN üzerinde çalışan sistemlerde TCP protokolünün kullanılması tavsiye edilir.
- Firewall gibi güvenlik araçları kullanılıyorsa TCP protokolü üzerinde kullanılacak port’ların yetkilendirmeye dahil edilmesi gerekir.
- System.Security namespace’i içerisinde bulunan ilgili class’ları kullanarak özel bir güvenlik sistemi geliştirilmediği sürece herhangi bir ön güvenlik sistemine sahip değildir.
IPC protokolünün kullanılması durumunda ise şu avantaj ve dezavantajlara sahiptir;
- IPC protokolü herhangi bir network connection’ı kullanmamaktadır. Bu sebeple hem TCP hem de HTTP protokollerine göre çok daha hızlı çalışır.
- IPC protokolü sadece aynı bilgisayar üzerinde bulunan application domain’leri arasında iletişim kurulması amacıyla kullanılabilir. Bu da IPC protokolünün farklı bilgisayarlar üzerinde çalışan uygulamalar arasında iletişim kuramayacağı anlamına gelir.
UYARI
IPC protokolünü yalnızca aynı bilgisayar üzerindeki application domain’lerinin iletişimi amacıyla kullanılabilir. IPC protokolü bilgisayarınızın içerisinde yer aldığı network connection’larını kullanabilme yeteneğine sahip değildir.