Makale Özeti

Bir önceki yazımızda servis mantığını kavramaya çalışmış, XML Web Service lerinin ne olduğuna değinmiş ve basit bir örnek ile yazımızı sonlandırmıştık. Bu yazımızda ise detaylıca değinmek istediğim konu "WSDL".

Makale

XML Web Servisleri - II

Bir önceki yazımızda servis mantığını kavramaya çalışmış, XML Web Service lerinin ne olduğuna değinmiş ve basit bir örnek ile yazımızı sonlandırmıştık. Bu yazımızda ise detaylıca değinmek istediğim konu "WSDL".

WSDL, Web Servisleri Tanımlama Dili (Web Service Definition Language) olarak dolaysız Türkçe ye çevrilebilir. Biraz açmak gerekirse. WSDL yazdığımız ve kullandığımız web servislerinde parametreler, dönüş değerleri ve internet üzerinde hangi iletim protokolünü kullanacağı gibi ayrıntılar ile beraber bir istemcinin Web servisi ile etkileşimini belirleyen XML tabanlı bir standart dosyasıdır. Şu anda web servis iletimi için kullanılabilen 3 protokol mevcuttur:

 -HTTP GET
 -HTTP POST
 -SOAP
  

WSDL Standardının tamamı http://www.w3.org/TR/2001/NOTE-wsdl-20010315 adresinde bulunabilir. Standartlar aslında çok karışık görünmektedir ancak geliştirici ASP.Net progrmlama mantığından soyutlanmıştır. Tıpkı ASP.Net Web Controls un klasik HTML imlerinden ve nitelik ayrıntılarından soyutlanmış olması gibi.

WSDL dokumanı web servisi ile istemci arasındaki iletişim için gereken bilgileri içerir. Yazdığınız kod veya web servisinin uyguladığı metodlar ile ilgili bilgi içermez. .Net FrameWork System.Web.Services.Description namespace i WSDL ile ilgili tüm tipleri barındırır.

Bir önceki yazımıza bağlı kalmak ve yazı serisinin bütünlüğünü ilt etapta bozmamak adına bir önceki yazımızda yaptığımız basit uygulamanın WSDL dokumanını inceleyelim. Ancak bu işlemi kısım kısım yapacağız. Zira WSDL dokumanı hem çok uzun hemde bu metod anlamamızı kolaylaştıracak.

Bir asmx dosyasından WSDL dokumanına ulaşmak için adres satırına "?WSDL" eklemeniz yeterlidir. Karşınıza aşağıdaki gibi XML tabanlı bir ekran gelecektir. Bu bizim üzerinde konuşacağımız WSDL dokumanıdır.



<definitions>
Yukarıda gördüğünüz ve daha öncede söylediğim gibi WSDL dokumanı tamamen XML yapısındadır ve tüm içerik definitons kök öğesi içinde bulunur.

<types>
Web servisinin kullandığı parametreler ve dönüş değerlerinin veri tipleri hakkında bilgi içerir.

 
- <types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
- <s:element name="carpim_hesapcisi">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="1" maxOccurs="1" name="degisken1" type="s:int" />
  <s:element minOccurs="1" maxOccurs="1" name="degisken2" type="s:int" />
  </s:sequence>
  </s:complexType>
  </s:element>
- <s:element name="carpim_hesapcisiResponse">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="1" maxOccurs="1" name="carpim_hesapcisiResult" type="s:int" />
  </s:sequence>
  </s:complexType>
  </s:element>
  </s:schema>
  </types>
 
<message>
Mesajlar bir web servisi metodu ile istemci arasındaki veri değişimini belirtir. Örneğin istemci döviz kur bilgisini istediğini belirten bir mesaj gönderdiğinde web servis metoduda içeriği farklı bir mesaj olarak geri gönderir. Veri tipi GetStockQuoteHttppostIn  mesajında olduğu gibi mesaj öğesi içinde tanımlanabildiği gibi , GetStockQuoteSoapIn mesajında olduğu gibi <types> öğesi içinde tanımlı veritiplerinden biri kullanılarakda tanımlanabilir.


 
- <message name="carpim_hesapcisiSoapIn">
  <part name="parameters" element="s0:carpim_hesapcisi" />
  </message>
- <message name="carpim_hesapcisiSoapOut">
  <part name="parameters" element="s0:carpim_hesapcisiResponse" />
  </message>
 
<portType>
Mesaj öğelerine kaşılık gelen <operation> öğelerini eşeleştirir. Kısaca açmak gerekirse , <message> öğeleri bir mesajın yağısını tanımlarken <operation> öğeleride hangi işlem için hangi mesajın karşılık geldiği bilgisini verir.

 
- <portType name="carpim_hesapcisiSoap">
- <operation name="carpim_hesapcisi">
  <input message="s0:carpim_hesapcisiSoapIn" />
  <output message="s0:carpim_hesapcisiSoapOut" />
  </operation>
  </portType>
 
<binding>
Soyut veri formatını internet bağlantısı üzerinden iletim için kullanılan porta bağlar. Yani bu öğe sayesinde Web Service ile konuşmak için gereken alt düzey protokol belirlenir.

 
- <binding name="carpim_hesapcisiSoap" type="s0:carpim_hesapcisiSoap">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
- <operation name="carpim_hesapcisi">
  <soap:operation soapAction="http://tempuri.org/carpim_hesapcisi" style="document" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
  </binding>
 
<service>
Web servisine giriş noktalarını temsil eder. Bu giriş noktaları sayesinde istemci web serisine erişir.

 
- <service name="carpim_hesapcisi">
- <port name="carpim_hesapcisiSoap" binding="s0:carpim_hesapcisiSoap">
  <soap:address location="http://localhost/service.asmx" />
  </port>
  </service>
Bir sonraki yazımızda SOAP konusuna değinecek UDDI ve DISCO dan bahsedeceğiz.