Web Service Kullanımı

Bir önceki Web Service Oluşturma adındaki yazımda Web Service oluşturma ve metodlarını test etmeyi gördük.Bu yazımızda ise yazılmış Web Service uygulamalarını nasıl kullanırız onu göreceğiz.

Her ne kadar kendi yazdığımız Web Service üzerinden çalışabilirsekte ben http://www.webservicex.net sitesindeki Web Service lerle çalışacağım.
Bu yazıda anlatılanların hepsi sizlerin yazdığı Web Service lerde de uygulanabilir.


Şimdi Web Service kullanımına değineceğiz.http://www.webservicex.net sitesinden bir Web Service seçelim.Ben hava durumunu bildiren Web Service kullanmayı tercih ediyorum.

Hava durumuyla ilgili Web Service hizmetini veren adres : http://www.webservicex.net/globalweather.asmx
(Bu adresi www.webservicex.net sitesi sizlere verecektir.)

Şimdi Visual Studio’ da bir Web ya da Windows projesi açın.Adı Web Service diye, illaki Web projelerinde kullanacak kanaatine varmayın.
Ben Windows projesi açıyorum.İçine birer ComboBox ve ListBox nesnesi koyuyorum.
Projemize sağ tıklayıp Add Service Reference diyorum.Burada dikkat edin.Add Reference diyip “ulan bu herifin anlattığı ekranla bizimki niye aynı değil” demeyin.Açılan ekran aşağıdaki gibi olacaktır.

Burada Address bölümüne “http://www.webservicex.net/globalweather.asmx” linkini yazacağız.Namespace bölümünde ise, kendi projemizde bu Web Service i kullanacağımız namespace adını vereceğiz.Ben namespace adını değiştirmiyorum.Discover ise, solution içinde Web Service uygulamanız varsa, bu buton ile Services bölümünde listeletip seçebiliyorsunuz.

Şimdi Address bölümüne .asmx uzantılı yolumuzu yazalım ve Go diyelim.Services bölümünde listelenen Web Service i seçip OK diyelim.

Bu işlemi yaptıktan sonra Server Explorer’da Service Referance dosyası eklenmiş.Ve bu dosyanın altında da ServiceReference1 adında bir dosya mevcut.Tabi bu isim başta Service Reference tanımlarken verdiğimiz namespace dir.

Öncelikle Web Service namespace i içindeki classtan nesne oluşturup, bu nesne üzerinden metodlarına ulaşalım.

            ServiceReference1.GlobalWeatherSoapClient HavaDurumu = new ServiceReference1.GlobalWeatherSoapClient();
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(HavaDurumu.GetCitiesByCountry("Turkey"));
            XmlNodeList Nodelar = xml.SelectNodes("NewDataSet/Table/City");
            foreach (XmlNode item in Nodelar)
            {
                comboBox1.Items.Add(item.InnerText);
                //InnerText özelliği ile o anki node ın içindeki yazan değeri alır.
            }

Yukarıda XmlDocument sınıfını kullanmamın sebebi, Web Service sonuç olarak XML dönmesidir.Ee doğal olarak XML sınıflarıyla dönen değerleri okuyorum.
(Not:http://www.webservicex.net/globalweather.asmx adresinden metodları bir kere test edip, dönen XML sonucuna göre elemanların isimlerini baktım.SelectNodes() metoduna rahatlıkla verebildim.)

Şu ana kadar ComboBox nesnemizi doldurduk.Şimdi de, ComboBox nesnemizin SelectedIndexChanged özelliğine gelelim.Her seçilen şehrin hava durumu bilgisini ListBox nesnemize yazdıralım.

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ServiceReference1.GlobalWeatherSoapClient HavaDurumu = new ServiceReference1.GlobalWeatherSoapClient();
            listBox1.Items.Clear();
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(HavaDurumu.GetWeather(comboBox1.Text,"Turkey"));
            listBox1.Items.Add("Tarih-Zaman : " + xml.SelectSingleNode("CurrentWeather/Time").InnerText);
            listBox1.Items.Add("Rüzgar : " + xml.SelectSingleNode("CurrentWeather/Wind").InnerText);
            listBox1.Items.Add("Sıcaklık : " + xml.SelectSingleNode("CurrentWeather/Temperature").InnerText);
        }

Son olarak ekran görüntüsü;


Son olarak unutmamanız gereken bir nokta var.Web Service kullanırken farkına varmışsınızdır ki, sizden bağımsız kişi veya kişiler tarafından yazılan program parcacıkları kullanıyorsunuz.Kullanırken o anki projenize o Web Service i tanıtıyorsunuz.Yani yarın bir gün o Web Service güncellenirse, sizin haberiniz olmayacaktır.O halde durmadan Web Service inizi Update etmeyi unutmayınız.Bunuda Service References dosyasının içindeki Web Service dosyamıza sağ tıklayarak, Update Service References demeniz yeterlidir.Web Service in yeni versiyonunu projenize set edip, sizlere gerekli yerlerde yapmanız gereken ayarlamalarda haberdar edecektir.

Bu yazımında sonuna gelmiş bulunmaktayız.
İyi çalışmalar..

Bunlar da hoşunuza gidebilir...

16 Cevaplar

  1. Edip dedi ki:

    Merhabalar. Web servis konusundaki yazılarınızı okudum çok da işime yaradı teşekkür ediyorum ancak yine bu konuyla ilgili size bir sorum olacak. Bir bilgisayarda yazılmış web servise başka bir bilgisayardaki masaustu uygulamasında erişebilmek için ne yapmamız gerekir?
    Teşekkür ediyorum. İyi çalışmalar.

    • Gençay dedi ki:

      Merhaba,
      Öncelikle bende size güzel yorumunuz için teşekkür ediyorum.
      Kanımca bu meseleyi iki bilgisayar arasında bir bağlantı kurarak ya da port açarak halledebilirsiniz.Tabi bunun nasıl yapılabileceği hakkında ne teorik ne de pratik bilgiye sahibim.İsterseniz bu sorunu ilgili forumlarda sorabilirsiniz.

      Saygılarımla…

  2. ömer dedi ki:

    Konuyla ilgili şu siteden yardım alabilirsiniz. Çok beğendiğim ve uzun zamandır takip ettiğim bir sitedir.
    http://www.sonercelix.com/MakaleDetay/15/ASPNET-Asmx-web-service-nasil-kullanilir-

  3. ömer dedi ki:

    Program hakkında bu siteden yardım alabilirsiniz.

    http://www***

    Ayrıca uzun zamandır takip ettiğim ve beğendiğim bir sitedir. Tavsiye ederim.

  4. isa dedi ki:

    Merhaba Burak bey,

    demo.tkgm.gov.tr/tasinmaz/DemoWebService.asmx?op=IlGetir adresindeki web servisi c# ortamınaki projeme çekmek istiyorum. Fakat aşağıdaki benden veri çekerken kullanıcı adı – parola bilgisi parametrelere eklememi istiyor. Bunu nasıl ekleyebilirim.
    TapuTest.DemoWebServiceSoapClient Test = new TapuTest.DemoWebServiceSoapClient();
    XmlDocument doc = new XmlDocument();
    TapuTest.OturumBilgisiDemo oturum = new TapuTest.OturumBilgisiDemo();
    oturum.KullaniciAd = “DemoUser”;
    oturum.Sifre = “54321+pl”;
    doc.LoadXml(Test.IlGetir());

    http://i.hizliresim.com/mLYP91.jpg

  5. isa dedi ki:

    oturum referansını ekleyince aşağıdaki hatayı alıyorum. Sebebini çözemedim.
    http://hizliresim.com/E3bNnv
    “Error 1 The best overloaded method match for ‘System.Xml.XmlDocument.LoadXml(string)’ has some invalid arguments D:\Satış Rapor\TapuKadastro\TapuKadastro\Form1.cs 31 13 TapuKadastro”

  6. Merve dedi ki:

    Merhaba öncelikle paylaşımlarınız için teşekkürler.

    Projemde bu şekilde bir web servis kullanıyorum ve her sorguda aldığım veriyi kendi veritabanıma kaydediyorum. Sorgulamadan önce bu veritabanını kontrol ediyorum. Kayıt yoksa bu web servisi kullanarak sorguluyorum.

    Yani izlediğim yol şöyle:
    Visual studioda bir web projesi oluşturup hazır web servisi projeye yukarıdaki gibi ekledim. Sonra Add >> web service ile kendi web servisimi oluşturdum.
    Önce kendi yazdığım webservisle veritabanını kontrol ediyorum istediğimi bulamazsam hazır web servisi kullanarak sorguluyorum dönen sonucu aynı zamanda veritabanına kaydediyorum.
    Localde yazdığım web servisi başka projeden çağırdığımda bir sıkıntıyla karşılaşmadım. Sadece bu projeyi nasıl yayınlayacağımı bilemedim. Yayınlamak için normal bir web projesinden farkı var mıdır yoksa publish edip sunucuya atınca web servisi kullanabilir miyim bilemedim? Ve izlediğim yöntemden daha iyi bir öneriniz var mıdır?

    • Gençay dedi ki:

      Merhaba,

      İzlediğiniz yöntem amacınız doğrultusunda gayet makuldur. Yayınlamak için yapmanız gereken publishten sonra derlenmiş proje dosyalarını direkt olarak sunucuya atmanız yeterli olacaktır.

      Sevgiler…

  7. Mustafa Onay dedi ki:

    Merhabalar,
    Yazınız için teşekkürler. Web servis lerle yeni çalışıyorum. Örnekte yaptığınız uygulamayı kendi projemde denediğimde :
    “The remote server returned an unexpected response: (400) Bad Request.”
    Hatası alıyorum. Sebebi ne olabilir sizce ?
    Teşekkürler

  8. Özgür Ü. dedi ki:

    Kodlar aynı ama anlamadığım bir hata alıyorum. Aldığım hata:”Kök düzeyindeki veriler geçersiz. Satır1, Konum1″. yardımc ı olur musunuz?

  9. alican dedi ki:

    wcf web servis kullanıyorum, servisim içinde farklı bir servise bağlantı sağladım. visual studio localinde sorunsuz çalışıyır. IIS içine attığımda servis bağlantım sorunsuz fakat içindeki diğer servise gönderme yaptığımda hata veriyor. IIS içinde servis içinde servis için ne yapılması gerekir?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.