10 Nisan 2010 Cumartesi

ASP.NET - Xml WebServices (2 - Uygulamalı Örnek)

Tekrar merhaba,

Bu makale de basit bir Web Service yazıp nasıl kullanıldığını bir örnek üzerinde görmeye çalışacağız. Bir önceki yazımda anlattığım üzere çeşitli nedenlerden dolayı Web Service kullanma ihtiyacı ortaya çıkabilir. Peki nasıl ve nereden başlamalı? Gelin hep birlikte sıfırdan bir proje oluşturalım.

Servis'i yazmadan önce Web Service'leri ile ilgili biraz hatırlatma yapmak isterim. Web Service'ler daha doğrusu Xml Web Service'ler adı üstüne Xml (eXtensible Markup Language) yapısını taşıdığı için data gönderim ve almada bize kolaylıklar sağlarlar. Bu kolaylığı sağlamaları için kullandıkları bazı protokoller vardır. Xml Web Service'leri de Xml tabanlı olduklarından SOAP (Simple Object Access Protocol, Basit Nesne Erişim Protokolü) protokol'ünü kullanırlar.

SOAP protokolünde taşınacak her bir datanın belli bir standartta olması gerekir. Bunun için SOAP ile taşınan bir datayı üç aşamada inceleyebiliriz.

Envelope - Header - Body

Envelope : Bu yapının en geniş kümesidir. Şekilde de görüldüğü gibi her bir SOAP Envelope'u bünyesinde Header ve Body'i içermelidir.

Header : Gönderilecek olan datanın ön bilgisini taşır.
Body : Gönderilecek olan datanın içeriğini taşır.


Artık projeyi geliştirmeye başlayabiliriz. Her zaman ki gibi Visual Studio arayüzünden yeni ve boş bir Solution oluşturuyorum. İsmide blogWebService olsun. Bu Solution'ıma bir adet Web Service ve bir adet de bu Web Service'i tüketecek yani test edeceğimiz bir Web Projesi ekleyeceğim

İlk olarak servisimizi yazalım. Solution'a sağ tıklayıp Add sekmesinden NewProject diyorum ve karşıma gelen arayüzden ASP.NET Web Service Application sekmesini seçip ismine de blogService adını veriyorum.

Web servisimizi oluşturduğumuz anda Visual Studio bize standart bir Web Service'te olması gereken yapıları ve de bir metot örneği ile oluşturup getiriyor.

Şimdi gelelim asıl soruya. Peki bu servis ne iş yapacak?

Gelin basit bir metot yazalım ve metot bizden string bir değer alıp bunu içinde işleyip tekrar string olarak geri döndürsün. HelloWorld metodunu silip yerine kendi Hosgeldin metodumuzu ekleyelim.



Kural 1 - Eğer bir Web Service için metot yazıyorsanız, her zaman metodun başına [WebMethod] etiketini koymanız gerekir. Bu, metodun sisteme tanıtılmasını sağlar.

Kural 2 - Web Service'te yazdığımız metotlar Public olmalı ki dışarıdan çağırılabilsinler.

Kural 3 - Ve son olarak metodun geri dönüş tipinin Serializable (Serileşebilir) bir tip olması gereklidir. Serileşme'yi başka bir makalede uzun uzun anlatmak daha doğru olur.

Evet gelelim metodumuza. Metot bizden string "ad" ve "soyad" olarak iki değer alıp bunları işleyip, tekrar string olarak geri veriyor olsun.

























Metodumuzu yazdık. Test edelim bakalım servis çalışıyormu. ".asmx" uzantılı Web Service'imize sağ tıklayıp "View in Browser" diyoruz. Ve evet yazdığımız metot çağırılmak üzere üretilip getirilmiş. Tıklayıp değerleri girelim bakalım çalışacak mı ?





Güzel. Sıra geldi bu servisi kullanmaya. Peki bu servisi nasıl kullanacağız?

Servisi kullanabilmek için önce ona ulaşmak gerekir öyle değil mi? Peki bu nasıl olacak?

Bu noktada bazı hatırlatmaları yapmakta fayda var. Web Service'ler bir web sayfası gibi ulaşılabilirdir. Yani temelinde her web sayfasında olduğu gibi URL (Uniform Resource Locator)' i mevcuttur. Ve bu URL üzerinden ulaşılırlar.

Şimdi gelelim WebService'imizi dışarıya açmaya. Bu işlem için tabiki IIS (Internet Information Server)' ı kullanacağız. WebService'imizi dışarı açmak için (Publishing) Visual Studio arayüzümüzü de kullanabiliriz. Bunun için servisimize sağ tıklayıp Publish diyoruz.


Açılan arayüzden "..." diyip


















Burada ilk olarak Local IIS'i seçiyoruz. Ardından Web Service'i hangi dizin altında oluşturmak istediğimizi seçiyoruz. Ben test amaçlı olduğundan Default Web Site (Varsayılan Web Sitesi)'ı seçtim siz tabiki istediğiniz bir dizin oluşturabilirsiniz.
Daha sonra sağ üstte bulunan Create New Web Application diyip URL'imizin ismini veriyoruz. Ve son olarakda Open'ı diyip ilk karşımıza gelen menüde seçimlerimizin oluştuğunu görüyoruz.

Burada da Publish diyip servisimizi Local IIS'e açmış bulunuyoruz.



















Gördüğünüz gibi artık Web Service'imize "http://localhost/blogHosgeldinService/" adresinden erişebiliriz. Tabiki sonuna servisi ekleyerek. Yani "http://localhost/blogHosgeldinService/Service1.aspx"'i bir browser'da açar iseniz servisin çalıştığını göreceksiniz.

Artık servisi test edecek projeyi geliştirmeye başlayabiliriz. Bunun için Solution'ımıza yeni bir Web Project ekliyorum. İsmide blogServConsumer olsun.

Tüketici (Consumer) projemize bir adet Label, iki Textbox ve Button koyuyorum. Button'un click olayında Web Service'i de ki metodu çağırıp girdiğimiz değerleri Label'da göstereceğim.

Sıra Web Service'i projemize eklemeye geldi. Bunun için References kısmına sağ tıklıyorum. Gördüğünüz gibi karşımıza Add Reference, Add Web Reference, Add Service Reference isimli üç adet referans ekleme seçeneği çıktı. Peki neden üç farklı yol var ? "Neden ?" sorusu bir yazılımcı için olmazsa olmaz fakat bu sorunun cevabını başka bir makalede uzun uzun anlatmam gerekecek.

Bunu şimdilik geçip Add Service Reference diyorum.



















Karşımıza referans ekleme arayüzü geliyor. Burada referans eklemenin çeşitli yolları var. Örneğin sağ üstte bulunan Discover'a tıklayarak bu Solution içinde eklenebilecek servisleri listeleyip ekleyebilirsiniz. Veya Address kısmına direkt servisinizin URL'ini yazmak. Başka bir yol sol altta bulunan Advanced... seçeneğini seçerek
























Karşımıza gelen Service Reference Settings arayüzünden Compatibility kısmında bulunan ve açıklamasına yine girmeyeceğim Add Web Reference...'ı kullanmaktır.


































Karşımıza gelen arayüzden Web services in this solution'ı seçip bu solution içinde ki Web Service'leri listeliyoruz. Buradan da servisimizi seçtikten sonra çağırırken kullanmak üzere ismini verip (Web reference name : "blogServis") Add Reference diyip işlemimizi bitiriyoruz. Evet nihayet servisi ekleyebildik :)

Bir kaç saniyelik işlemden sonra servisin referenslara eklendiğini göreceksiniz. Gelin şimdide servisimizi kullanalım. Eklediğimiz Button'a çift tıklayıp kod tarafına geçiyorum. Servisi her event içinde çağırmamak için Page_Load metodunun üstüne servisimizin yeni bir Instance'ını alıyorum.

blogServis.Service1 blogServis = new blogServConsumer.blogServis.Service1();

Sırada button'a tıklanında metodu çağırmak kaldı. Click eventinde blogServis ismiyle oluşturduğum servisimizi çağırıp gerekli işlemleri gerçekleştiriyorum.

LabelSonuc.Text = blogServis.Hosgeldin(TextBoxAd.Text, TextBoxSoyad.Text);























Bakalım çalışıyor mu? Default.aspx sayfamı çağırıp gerekli bilgileri giriyorum ve "Göster" diyorum...













Web Service kullanarak ilk uygulamamızı geliştirdik. Bundan sonra ki dönem de Web Service ipuçlarını (Güvenlik, Performans, Asenkron Çözümler, Gerçek bir Web Service için gerekli ayarlar...) ele alacağım.

Tekrar görüşmek üzere.

Download : blogWebService

2 yorum:

  1. bu web servise nasıl başka bilgisayardan ulaşabiliriz.daha doğrusu başka bilgisayarda oluşturduğum web servisini kendi bilgisayarımda nasıl kullanabilirim. localhost olmadan yani.

    YanıtlaSil