Makale Özeti

Seminerlerde ve kitaplarda Microsoftun .Net vizyonu başlığı altında sıklıkla duyduğumuz cümlelerin başında Microsoftun, uygulama geliştiricilerin bir üst katmanda Microsoftun programlama araçlarını kullanarak yapılan işe özel programlama mantığı oluşturabilecekleri gelir. XMl Web Servisleri ile Microsoft bir anlamda bu sözünü tutmuş durumdadır. Çünkü web servisleri ile istemciler arasındaki haberleşme otomatikleşmiştir.

Makale

XML Web Servisleri VII

Seminerlerde ve kitaplarda Microsoftun .Net vizyonu başlığı altında sıklıkla duyduğumuz cümlelerin başında Microsoftun, uygulama geliştiricilerin bir üst katmanda Microsoftun programlama araçlarını kullanarak yapılan işe özel programlama mantığı oluşturabilecekleri gelir. XMl Web Servisleri ile Microsoft bir anlamda bu sözünü tutmuş durumdadır. Çünkü web servisleri ile istemciler arasındaki haberleşme otomatikleşmiştir.

Bir web servisinin metodunu çağırdığınızda SOAP kullanılarak sonuçlar önünüze getirilir. Aslında bu işi aracı bir sınıf kullanmadan da yapmak mümkündür. Kendi SOAP mesajlarınızı ve cevaplarınızı oluşturabilirsiniz. Ancak bu hem Web Servislerinin amaçlananın dışında pasif kalmasına sebep olacaktır hemde oldukça zor bir metoddur.

Web Servisleri İstemcisinin Konfigurasyonu
Bu işlem için sanırım en kullanışlı yol hem istemci hemde sunucu taraflı uygulamayı aynı çözüm içinde oluşturmaktır. Bunun için Visual Studio da aynı anda iki proje ile çalışmanız gerekir ki bunun için izlemeniz gereken adımlar:

- Oluşturduğunuz web servisi projesini açın
- File | Add Project | New Project menüsüne gelin
- ASP.Net Web Application seçeneğini seçin
- Ve asıl önemli kısım yeni oluşturduğunuz projeyi başlangıç projesi olarak seçmelisiniz. Aksi halde Start ı tıkladığınızda Web Servis denem sayfası ile karşılaşırsınız.



Bir Web Referansı Oluşturmak
Az önce aynı çözüm içine iki proje ekledik. Ancak bu iki projenin birbiriyle iletişim kurması için ne yazıkki bu yeterli değil. Şimdi bir web referansı ekleyerek yolumuza devam edeceğiz. Bunu da adım adım göstermekte fayda var:

- Solution Explorer da istemci projenin üzerini sağ tıklayın ve "Add Web Reference" seçeneğini seçin.
- Karşınıza aşağıdaki pencere çıkacaktır. Bu pencere web kayıtlarını arama, local makineyi arama, bir url arama ve local makinede bir url arama seçeneklerini size sunar.





-Deneme sayfasını görmek için Browser da olduğu gibi web servis isminin üzerine tıklamanız ve WSDL dokumanını görmek için url ye ?wsdl eklemeniz yeterlidir. Kısaca bu alanı browser gibi kullanabilirsiniz.

- "Add Reference" butonunu tıklamanızın ardın Solution Explorer da References sekmesinde eklediğiniz web servisi göreceksiniz.



Not:
Oluşturduğunuz web referansı oluşturduğunuz anki WSDL kontratı ve bilgilerini kullanır. Daha sonra web servisi değişecek olursa solution explorer da "localhost" üzerinde sağ tıklayıp "Update Web Reference" seçeneğini işaretlemeniz gerekir.

Şimdi ilk kez karşılaşacağımız bir dosyayı "Reference.vb" dosyasını inceleyelim.

Option Strict Off
Option Explicit On

Imports System
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Xml.Serialization

Namespace localhost

Public Class Service1
Inherits System.Web.Services.Protocols.SoapHttpClientProtocol

Public Sub New()
MyBase.New
Me.Url = "http://localhost/CarpmaWS/Service1.asmx"
End Sub

   Public Function Carpma(ByVal a As Integer, ByVal b As Integer) As Integer
      Dim results() As Object = Me.Invoke("Carpma", New Object() {a, b})
       Return CType(results(0),Integer)
   End Function

   Public Function BeginCarpma(ByVal a As Integer, ByVal b As Integer, ByVal callback As System.AsyncCallback, ByVal       asyncState As Object) As System.IAsyncResult
      Return Me.BeginInvoke("Carpma", New Object() {a, b}, callback, asyncState)
   End Function

   Public Function EndCarpma(ByVal asyncResult As System.IAsyncResult) As Integer
      Dim results() As Object = Me.EndInvoke(asyncResult)
      Return CType(results(0),Integer)
   End Function
   End Class
End Namespace


Burada sanırım sizin de ilk dikkatinizi çeken şey namespace isminin localhost olmasıdır. Buradan çıkan anlam sizin vekil sınıfı kullanmak için bu ad uzayına erişmeniz gerektiğidir.

İkinci olarak ele alınması gereken şey Me.Url satırı ile referans gösterilen .asmx dosyasının tam linkinin bulunmasıdır. Buradan çıkaracağımız anlam ise aynı yapıyı taşıyan bir web servise buradaki adres satırını güncelleyerek erişebiliriz.

WSDL.exe İle Aracı Sınıfın Oluşturulması
WSDL.exe programına C:\Program Files\Microsoft.Net\FrameworkSDK\Bin dizininden erişebilirsiniz. Şayet Visual Studio kullanıyorsanız bu adres de aynı işi görecektir: C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin

WSDL.exe de söz dizimini kısaca açıklayalım:

wsdl / language: dil /protocol:protokol
       /namespace: namaspace adi  /out:dosyaadi
       /username: kullanıcı adı /password:sifre
       /domain: url veya yol

Language: Sınıfın yazıldığı dildir.
Protocol: Varsayılanı SOAP tır. HTTPGet veya HTTPPost olarak değiştirebilirsiniz.
NameSpace: Aracı sınıfın kullanacağı namespace i belirtir. Hiçbir şey girmezseniz sınıflar global olur.
Out: Oluşturulan dosyaya verdiğiniz ismi belirtir. Varsayılan değeri web servisi ile aynı ismi taşımasıdır.
Username ve Password : Keşif dosyası veya wsdl dokumanına ulaşılması için web sunucusu gerektiriyorsa kullanılacak kullanıcı adı ve şifreyi belirtir.
Domain: WSDL dosyasının yerini belirler.

Not: Aracı bir sınıf kullanmadan da web servislerini kullanabilirsiniz. Elinizde olması gereken tek şey SOAP mesajları gönderebilen ve okuyabilen bir programdır.

Artık web servisimizi kullanacağımız kodu yazmanın zamanı geldi.

Form ekranımızı aşağıdaki gibi dizayn ediyoruz. İki sayının çarpımını alacağımız için 2 textbox , 1 buton ve sonucu yazdıracağımız bir label ilk deneme için yeterli kontroller olacaktır.



Kodumuz ise:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Web Servisimizi ve Sonuc değişkenimizi tanımlıyoruz.
    Dim WS As New localhost.Service1
    Dim Sonuc As Integer
    WS bağlantımız için bir timeout süresi belirliyoruz. Default u 3 saniye yani 3000 milisecond.
    WS.Timeout = 5000
    Try
       Şayet bağlantı sağlanır ise textbox1 ve textbox2 deki verileri parametre olarak web servise gönderiyoruz.
       Sonuc = WS.Carpma(TextBox1.Text, TextBox2.Text)
       Sonucu ekrana yazdırıyoruz.
       Label3.Text = "Bu iki sayının çarpımı = " + Sonuc
    Catch ex As Exception
       Hata oluşursa static hata mesajı veriyoruz.
       Label3.Text = "Web Servise e bağlanamadı"
    End Try
End Sub


Ve sıra geldi ekran çıktılarımıza :

Çalışan sayfa:



Web servisine bağlanamayan sayfa:



Web servisleri ile ilgili şimdilik söyleyeceklerim bu kadar. Bu yazı dizisinin amacı web servis kavramı ile yeni tanışacaklara genel oluşturma ve kullanım bilgilerini vermekti.

Bundan sonraki yazılarımız web servislerinin biraz daha ileri seviye kullanımına ve gerçek örneklere dayalı olacak.

Uygulama örneklerini indirmek için tıklayınız