Makale Özeti

Herkese merhabalar, bu makalemizde Silverlight ile web servislerini konuşturarak web servis aracılığıyla çeşitli işlemler yapacağız.

Makale

Silverlight üzerinde doğrudan sunucu tarafli veritabanı erişimi olmadığı için XML yada Web Servisleri gibi farklı aracılar ile veri alışverişini sağlayabiliyoruz. Bu makalemizde de silverlight uygulamalarında web servisinin nasıl kullanıldığına, veri alışverişinin nasıl yapıldığına bakacağız.

İlk olarak Visual Studio 2008’i açalım ve yeni bir silverlight projesi başlatalım. (Eğer ilk kez silverlight ile uygulama geliştiriyorsak burayı okumanızı tavsiye ederim). Solution üzerinde bize 2 adet proje açılıyor. Biri geliştireceğimiz silverlight projesi diğeri ise geliştirdiğimiz uygulamayı test edebilmemiz için eklenen test projesi.

Test projesine yeni bir web servis dosyası ekleyelim. Burada uygulamamızda kullanacağımız servisi hazırlayacağız. İlk olarak basit bir örnek ile konuya girelim. Örneğimiz de basitçe bir login ekranı tasarlayacağız. Silverlight uygulaması üzerinde kullanıcı adı ve şifre için textboxlar olacak. Kullanıcı, kullanıcı adı ve şifresini girip butona bastığında servise bağlanacak ve duruma göre bir kullanıcıya olumlu yada olumsuz bilgi dönecek. Şimdi web servisimizi hazırlayalım.

[WebMethod]
public bool KullaniciKontrol(string kullaniciAdi, string sifre)
{
    if (kullaniciAdi=="semgoksu" && sifre == "12345")
   {
      
return true;
   }
  
else
   {
        return
false;
   }
}

Web servisimizi hazırladık şimdi silverlight uygulamasında kullanacağımız arayüzü hazırlayalım. Bunun için silverlight projemizi Expression Blend’de açalım.

<UserControl x:Class="SilverlightWebServisOrtakligi.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">

<Grid x:Name="LayoutRoot" Background="White">
<
TextBox Margin="167,126,112,0" VerticalAlignment="Top" Text="" TextWrapping="Wrap" x:Name="txtKullaniciAdi"/>
<
TextBox Margin="167,0,112,122" Text="" TextWrapping="Wrap" VerticalAlignment="Bottom" x:Name="txtSifre"/>
<
Button HorizontalAlignment="Right" Margin="0,0,112,96" VerticalAlignment="Bottom" Content="Kontrol Et" x:Name="btnKontrolEt"/>
<
TextBlock HorizontalAlignment="Left" Margin="133,0,0,126" Text="Şifre" TextWrapping="Wrap" VerticalAlignment="Bottom" FontWeight="Bold"/>
<
TextBlock HorizontalAlignment="Left" Margin="85,128,0,0" VerticalAlignment="Top" Text="Kullanıcı Adı" TextWrapping="Wrap" FontWeight="Bold"/>
<
TextBlock Margin="90,79,121,0" VerticalAlignment="Top" Text="ÜYE GİRİŞİ" TextWrapping="Wrap" FontWeight="Bold" FontSize="16" Foreground="#FFFF0000"/>
</
Grid>

</
UserControl>

Web Servisimiz ve formumuz hazır şimdi tekrar visual studio 2008’e dönelim. Silverlight projesinin üzerine gelelim sağ tıklayarak , Add Service Reference… tıklayalım. Gelen pencereden discover’a tıklarsak projemiz üzerinde ki servisi bulacaktır. Servise bir isim verip projemize ekleyelim.

Silverlight projesine servisi ekledikten sonra artık yapmamız gereken butona tıklandığında servise bağlanıp ilgilili metoda parametreleri yollamak. Bunun için paga.xaml.cs’e gidip Butonumuz için bir click event listeneri oluşturalım. Sonrasında da referans olarak eklediğimiz servisin örneğini oluşturalım.

ServiceReference1.WebService1SoapClient loginServis = new SilverlightWebServisOrtakligi.ServiceReference1.WebService1SoapClient();

public Page()
{
   InitializeComponent();
   btnKontrolEt.Click += new RoutedEventHandler(btnKontrolEt_Click);
}

void btnKontrolEt_Click(object sender, RoutedEventArgs e)
{
   loginServis.KullaniciKontrolAsync(txtKullaniciAdi.Text, txtSifre.Text);
}

Dikkat edersek metodumuzun ismi bizim verdiğimizden biraz daha farklı bir şekilde geldi. Bunun< da nedeni silverlightın varsayılan şekli ile web servisleriyle asenkron olarak çalışıyor olmasındandır.

KullaniciKontrolAsync metodu ile servise asenkron bir çağrıda bulunuldu. Peki çağrının sonucunu nasıl alacağız? Bunun da çözümü çok basit, metodumuz ile aynı isimde ve sonuna Completed eklenmiş bir event var. (Bu tüm metodlar için geçerli). Bu event tetiklendiğinde bize eventargumandan result isimli bir property dönüyor. Bu property metodumuzun geri dönüş tipi ile aynı tipte oluyor. Şimdi KullaniciKontrolCompleted eventini oluşturup login işleminin sonucunu alalım.

public Page()
{
   InitializeComponent();
   btnKontrolEt.Click += new RoutedEventHandler(btnKontrolEt_Click);
   loginServis.KullaniciKontrolCompleted += new EventHandler<SilverlightWebServisOrtakligi.ServiceReference1.KullaniciKontrolCompletedEventArgs>(loginServis_KullaniciKontrolCompleted);
}

void loginServis_KullaniciKontrolCompleted(object sender, SilverlightWebServisOrtakligi.ServiceReference1.KullaniciKontrolCompletedEventArgs e)
{
    bool sonuc = e.Result;
    if (sonuc)
   {
       MessageBox
.Show("Giriş Başarılı");
   }
   else
  
{
       MessageBox.Show("Giriş Hatalı");
   }
}

Evet şimdilik yapacaklarımız bu kadar artık uygulamamızı test edebiliriz. edebiliriz.

Uygulamamızın başarılı bir şekilde çalıştığını gördük. Uygulamayı bir adım daha ileri götürüp animasyon ile biraz daha süsleyebilirsiniz.

Makalemizin sonuna geldik, başka bir makalede görüşmek dileğiyle. .NET ve Silverlight ile kalın ;)

Sem GÖKSU
www.semgoksu.com | www.yazilimgunlugu.com
sem.goksu@yazilimgunlugu.com

Kaynaklar
msdn.com
silverlight.net
daron.yondem.com