:))
Kullandığın samimi dil için teşekkürler.
Uzun uzun kitapları okuyan olmaz artık sanırım.
Artık insanlar direk cevabı arıyor.
Hatta programcılar direk çözümü üretecek kod örneğine odaklanmış durumda.
Stackoverflow'u kapatsalar çoğu yazılımcı perişan olur muhtemelen.
Kısa kısa derleme makalelerle piyasa yapmaya çalışan bir grup da var maalesef, bu da doğru.
Ben en az yüz defa denk gelmişimdir. Adamın yazdığı makaledeki örneklerde kod hatası var.
Besbelli denememiş bile koyduğu kodları.
Mal olan bunlar işte.
Şu gerekli bir durum: üç beş sayfalık makalelerle teknolojinin (mesela WCF'in) geçmişi bugünü yarını oldukça teknik ifadeler içerecek şekilde, ama mutlaka insanların olayı kafasında canlandırmasına engel olmayacak berraklıkta anlatılmalı. Bunu yapanlar da var (çoğunlukla yabancı olanlar) sağ olsunlar.
Konuyla ilgili de bir iki satır yazayım da okuyucu arkadaşları kızdırmayayım; konu nerden nereye geldi demesinler.
WS ile WCF genellikle birbirine karıştırılıyor.
Ben dilim döndüğünce ve umarım hata yapmadan olayı aktarmaya çalışayım:
WS bir sunucudaki bir classın fonksiyonlarının HTTP protokolü kullanılarak başka bir bilgisayardan tetiklenmesi ve parametreler kullanılarak farklı sonuçların iletilmesini sağlayan text tabanlı (SOAP-XML) bilgiyi bir bilgisayardan bir başka bilgisayara taşımanın pratik bir yolu olarak hayatımıza girdi. Bunu biliyoruz zaten.
Ama bir kısım sıkıntıları da beraberinde getirdi.
(1) Şişman bir data üretiyor,
(2) Yavaş çalışıyor,
(3) Güvenlik sağlamak için dikkat etmek lazım (sonradan MS bir takım eklentiler filan üretti ama kullanımı pratik değildi, paket şifreleme mümkün değil)
(4) Her tür data transfer edilemiyor, (WCF'de de kısıtlama var ama WS kadar değil kesinlikle)
(5) Çok büyük boyutlu data transfer edilemiyor (100 MB dolaylarında sıkışıp kalıyorsunuz)
(6) İlle de response almak zorundasınız, datayı gönderdim cevabı lazım değil mantığı yok (ama bazı senaryolarda gerekli),
(7) Tracking ya da loglama yapmak oldukça emek gerektiriyor,
(8) State management zor, bu nedenle de manuel locking-blocking mekanizmaları geliştirmek zorundasınız,
(9) Sunucu tarafında tüm requestler için ortak in-memory veriler kullanmak dertli,
(10) Mesajları bir queue mantığıyla işleme almanız gereken senaryoları uyarlamak çok zor,
(11) Bazı durumlarda canlı aktif bağlantıları takip etmeniz gerekiyor ve bunu WS ile yönetmek çok çok zor,
(12) Sunucu tarafından terminale durup dururken data göndermeniz gereken durumlar (olaylar) olabiliyor, bunu WS ile çözemezsiniz,
(13) Sadece IIS üzerinde host edebilirsiniz, mesela bir servis uygulamasının veya bir desktop uygulamasının parçası yapamazsınız,
(14) Birden çok metod çağıracakken bunları transactionlarla birleştirmeniz imkansızdır.
(15) Ajax ile erişim çok zordur
(16) JSon desteklenmez,
(17) Peer To Peer diye bir şey kesinlikle yoktur,
...
Aklıma hızlıca bu kadarı geldi. Eminim genişletilebilir.
Bu sıkıntıların yanına bir de WS ile yazılan veri dağıtım sistemlerinin başka yollarla da dağıtılmasını gerektiren durumlar için yeniden yazılması zorunluluğu filan ortaya çıktı. Yani şöyle, servis kodlarını yazdım, WebServisleri için hazır, aynısını bir de TCP-Socket için yazmam lazım ne olacak? Microsoft da "Remoting" ile kullanılan avantajlı iletişim tekniği ile WS ile kullanılan iletişim tekniğini bir araya getiren ve yukarıdaki tüm sıkıntıları bertaraf eden bir kütüphane yazmaya karar verdi. Bu yeni kütüphanenin adından anlaşılacağı üzere her türlü iletişim sorununu çözecek bir kütüphane olmasına özen gösterdi.
Şunu demek istediler; WCF sadece XML data alıp veren bir web servisi değildir. Yirmi otuz satır kod yazarak bir chat server elde edebilirsiniz. Chat odasına girenler hemen senkronlanır, yazılan mesajlar anında kaç bin kişi login ise otomatik dağıtılır, 1 GB boyutunda bir filmi http üzerinden gayet kolay transfer edebilirsiniz, hatta transfer anında bir yandan izleyebilirsiniz, sunucudaki bir değişkenin değeri değiştiğinde terminallere son datayı dağıtabilirsiniz, sunucuda aynı anda kaç kişinin request atabileceğini basitçe ayarlayabilirsiniz, mesela bir metodun aynı anda sadece bir kişi tarafından çalışmasını temin edebilirsiniz. Filan filan filan.
Bu yepyeni bir kütüphane yazmayı gerektirdi tabi ki.
Ama bunu yaparken de eski teknolojiye uyumlu WS kullanabilen kişilerin WCF üzerinden veri almaları da engellenmesin onlar da veri alıp verebilsin diye bir kısım uyumluluk kodları da hazır edildi. WS olarak register edilen bir WCF servisinde tüm fonksiyonları sağlayamazsınız sebebi bundandır. Metodların parametrelerinde DotNet ufak tefek oynamalar yapabilir, yapar. Özellikle asenkron çalışma durumları için bu daha belirgindir.
İyi günler.