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.