Web Servis dediğimiz ne(değil)dir… -2-

   Bir önceki makalemizde kaldığımız yerden devam ederek bu makalemde de xml web servislerine dair hatalı kullanımları örneklemeye devam edeceğim. Bu makaledeki odak noktamız biraz daha web servislerin yapısı, iletişim şekli olacak.

   Pek çok servis tasarımında gözden kaçan noktalardan birisi en nihayetinde web ortamında çalışıldığıdır. Yazılım geliştiricinin kendi bilgisayarında sorunsuz çalışan bir xml web servisi, gerçek ortama geçildiğinde pek çok problemle karşılaşabilir. Bu problemlerin başında da sahadan gelen yoğun kullanımı,yükü, kaldıramayan sistemlerin zamanla yavaşlayarak gelen isteklere geç, hatta çok çok geç yanıt vermesidir.

Kum saati   Aranızdan, çok geç yanıt vermesi hiç yanıt vermemesinden iyidir diyenleri duyar gibiyim; ama buradaki ince ayrıntı ne kadar geç olduğudur. İzin verin açıklayayım;

   Bir xml web servisinde yapılan işlem aslında -en az- iki makineye dağılmış bir işlemdir. İstemcide çalışan bir iş mantığı sonrası oluşan veri işlenmesi üzere sunucuya iletilir, sunucuda çalışan bir başka iş mantığı ise sonucunu yenide istemciye iletir. Burada verinin iletilmesi işlemi http üzerinden soap mesajları ile yapılmaktadır. İstemci bir soket açarak sunucudaki bir port’a veri yazar, sunucu bu porttan gelen veriyi okur, işler ve sonucu açık kalan bu bağlantıdan geri istemciye iletir. Aradaki iletişim sunucu ile istemci arasında açılan bu kanaldan yapılacaktır. Sistem kaynaklarının en uygun şekilde kullanılması amacıyla da açılan bu kanal sonsuza kadar açık bekletilmez.  Bir aktivite olmaması durumunda belirli bir süre sonunda aradaki kanal/bağlandı/soket kapatılacaktır. Bunun en temel denedi DOS v.b. sunucu kaynaklarını tüketerek sunucunun hizmet vermesini engelleyen  saldırılardan korunmaktır. Siz aksini belirtmediğiniz sürece .net istemcileri 1 dakika sonunda sunucudan yanıt gelmediyse bağlantıyı sonlandıracaktır.

   Bu detaydan sonra sunucudaki yoğunluğun istemci tarafında ne gibi problemlere sebep olabileceğini inceleyelim. İstemci olarak bir bağlantı açarak web servis çağrısı yaptınız ve sunucuda bir süreci başlattınız. Diyelim ki yoğunluktan dolayı sunucu size 1 dakika içerisinde yanıt veremedi ve istemci otomatik olarak bağlantıyı sonlandırdı. Bu durumda istemci uygulama zaman aşım (time-out) hatası alacaktır; fakat istemcinin bu hatayı alıyor olması aslında tüm sürecin o noktada sonlandığı anlamına gelmeyecektir. İstemcide alınan bu zaman aşım hatası aslında sadece aradaki bağlantının istemci tarafından sonlandığını belirtmektedir ve sunucuda yapılan işlem hakkında bir bilgi vermeyecektir. Bunun anlamı, istemci olarak siz zaman aşım hatası almış bile olsanız sunucuda işlemin devam ederek bir süre sonra sonuçlanabileceğidir. Örneğin; yapılan işleme dair tekil bir bilet bilgisi işlem sonucunda size iletiliyorsa, böylesi bir durumda sunucunun istemciye ulaşabileceği bir kanal kalmayacağı için bu bilgi de iletilemeyecektir.

El sıkışma   Kamuya açık bir web servis geliştiriyorsanız bu oldukça önemli bir nokta. Durum hakkında istemcileri uyararak zaman aşım süresini ,örneğin, 2 dakika yapmalarını isteyebilirsiniz tabi ki; ama unutmayın, hiç kimseyi bunu yapmaya zorlayamazsınız. Bu durumda geliştirdiğiniz xml web servislerinde böylesi senaryoları göze alarak bağlantının x bir nedenle sonlanabileceğini de düşünmeli, böylesi bir durumda istemcilerin işlem sonucu sorgulayabilecekleri ve hatta işlemi iptal edebilecekleri ek servis metotlarını da sunuyor olmanız gereklidir.

   Buna daha güzel bir çözüm ise web servislerinizde transaction desteği sunarak işlemleri atomik gerçekleştirmenizdir. İstemcinin bir şekilde sonucu okumamış olması durumunda sunucuda yapılan işlemi iptal edebilirsiniz. Bu tarz yaklaşımları destekleyen standartlar hali hazırda kullanılabilmekte, örneğin WS-Atomic Transaction; ama üzülerek belirtmeliyim ki  şu ana kadar aralarında pek çok önemli ve büyük projenin de olduğu, tecrübe ettiğim onca kamu projesi arasında buna benzer standartları destekleyen maalesef ki bulunmamakta.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

5 yorum

  1. Abdurrahman   •  

    merhabalar hocam,
    bir blog uygulaması geliştiriyorum. yönetim panelini desktop tabanlı yapacağım. bunun için de web servislerden faydalanıyorum. bu bahsettiğiniz sıkıntı ile karşılaşma ihtimalim var mı? sonuçta ufak bir uygulama

    • Fatih Boy   •     Yazar

      Merhaba Abdurrahman,
      Tabi ki senin örneğin için de benzer durumlar söz konusu olabilir. Örneğin web sitesini host eden servis sağlayıcının bandwidth’i yetmediği için işlemler zaman alabilir… Böylesi bir durumu göz önüne alarak, örneğin; masaüstü uygulamanın kullanıcılarının makalelerin listesini yeniden çekebilecekleri bir buton koyabilirsin. Bu buton tabi ki senin belirlediğin bir web servis metodunu çağırarak kaydı yapılmış tüm makaleleri listeleyebilir. Bu aklıma gelen en basit örnek tabi ki. Senaryolar çoğaltılabilir.
      Örneğini bir de şu açıdan inceleyelim; ya masaüstü tarafını sen yazmasaydın. 3. parti yazılımcılar blog uygulamana böylesi bir özellik katmak isteselerdi.. Bu durumu daha en baştan öngörüp gerekli web servis metodları sunuyor olmanın asıl önemi işte tam da bu anda ortaya çıkacaktı, ki bu tam da benim yazımda sizlere aktarmak istediğim nokta.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir