Makale Özeti

Daha önceki yazımda WSDL den bahsetmiş ve bu yazı için konumuzu SOAP olarak belirlemiştik. Yine bir önceki yazımda bahsettiğim gibi bir istemcinin bir Web Servisi ile haberleşmesi, iletişim kurabilmesi için üç farklı protokolden söz ediyoruz.....

Makale

XML Web Servisleri - III

Daha önceki yazımda WSDL den bahsetmiş ve bu yazı için konumuzu SOAP olarak belirlemiştik.
Yine bir önceki yazımda bahsettiğim gibi bir istemcinin bir Web Servisi ile haberleşmesi, iletişim kurabilmesi için üç farklı protokolden söz ediyoruz. Kısaca bunların ne olduğunu hatırlatmak gerekirse:

- HTTP GET
- HTTP POST
- SOAP

SOAP(Simple Object Access Protocol), HTTP üzerinde çalışan, fakat bilgiyi bir araya toplamak için XML benzeri özel bir format kullanan protokoldür. SOPA protokolünü kullandığınızda , mesajlarınızdaki bilgileri kodlamak için aslında SOAP standardını kullanırsınız. SOAP mesajları XML e çok benzeyen bir yapıdadır.

Örnek SOAP mesajı:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <GetStockQuote xmlns="http://tempuri.org/message/">
      <Ticker>MSFT</Ticker>
      </GetStockQuote>
   </soap:Body>
</soap:Envelope>

SOAP, HTTP POST ve HTTP GET protokollerine göre çok daha gelişmiş ve biçimlenmiş sonuç üretir. Bir HTTP istemi bilgiyi basit isim/değer çiftleri halinde gönderir. Öte yandan bir SOAP mesajı ise özel bir sınıfın bir örneği gibi daha karmaşık bilgilere uyum sağlayabilen iyi biçimlendirilmiş bir XML dokumanı kullanır.

Yukarıdaki SOAP örneğine baktığımızda kök öğenin <soap:Envelope> olduğunu ve istemin <soap:Body> kısmını içerdiğini görürüz. Gövdenin içine GetStockQuote metodunun MSFT Ticker  parametresi ile çağrıldığını gösteren bilgi yer alır. Bu örneğimiz oldukça dolaysız bir metod çağrısı olmakla birlikte, SOAP mesajları özelleştirilmiş nesneleri veya DataSet  leri temsil eden yapılarının bütününü birden de aynı kolaylıkla içerebilir.

Bu isteme yanıt olarak SOAP çıktı mesajı verir. SOAP standardı hakkında detaylı bilgi için http://www.w3.org/TR/SOAP adresindeki spesifikasyonlara başvurabilirsiniz. Daha önceki yazımda da W3.Org a ait bir link vermiş ve bir ayrıntıyı belirtmiştim. Bunu tekrarlamanın yararı olacaktır sanırım. Bu adreste SOAP standardının çalışması hakkında bir çok bilgiye ulaşabilirsiniz ancak günlük hayatta programlama nadiren bu bilgilere ihtiyaç duyarsınız.

Bir Web Servisi İle İletişim

WSDL ve SOAP standartları , Web servisi ile istemci arasındaki iletişimi kurarlar ama bu iletişimin nasıl gerçekleşeceğini göstermezler. Burada üç bileşen rol oynar:

- İşleve sahip özelleştirilmiş bir web servis sınıfı
- Bu işlevi kullanmak isteyen bir istemci uygulaması
- İkisi arasında arabirim görevi üstlenen bir vekil sınıf

1.İstemci bir vekil sınıfının bir kopyasını oluşturu.
2.İstemci normal - yerel bir sınıf kullanır gibi vekil sınıf üzerinde metodu çalıştırır.
3.Arka planda vekil sınıf Web Servisine bilgiyi uygun formatta gönderir ve karşılığında yollanan mesajı alır.
4.Vekil sınıf elde ettiği sonucu çağrı koduna çevirir.

Burada dikkat edilmesi gereken ayrıntı, istemcinin bir web servisi ne uzaktan fonksiyon çağrısı yapıldığının farkına varmak zorunda olmsıdır. Süreç tamamen şeffaftır ve sanki kendi yerel kodunuzdan bir fonksiyon çalıştırır gibi çağırır.

Dikkat etmeniz gereken noktalar:

- Her veri tipi metod parametrelerini ve dönüş değerlerini desteklemez.

- Ağ çağrısı kısa ama ölçülebilir uzunlukta bir zaman alır.

- Web servisi durum bilgisini saklamak amacıyla ilave adımlar atılmazsa bu veriler kaybolur.

- Web metodunu kesintiye uğratabilecek bir çok hata tipi vardır.

Sağlam bir uygulama inşa edebilmek için tüm bu hususları dikkate almalısınız.

Bir sonraki yazımızda konumuz "Web servis keşfi" ve "UDDI" üzerinde konuşarak devam edecek.