Web Servis Yazmak ve Kullanmak

Bu yazımda elimden geldiğince Web Service (Web Servis) konusuna değinmeye çalışacağım. Öncelikle web servis nedir sorusunun cevabını kendimce vermeye çalışayım. Çeşitli uygulamalar geliştiren bir firma olduğunuzu kabul edelim. Projelerinizde sık sık kullandığınız yapılar var örneğin, seçilen şehire göre ilçeleri listeleme veya döviz kurlarını gösterme gibi.. Biraz daha geniş düşünürsek, birden fazla uygulamada kullandığımız sanal posları tek bir merkezde toplayıp, istediğimiz uygulamadan veri gönderip işlemlerimizi gerçekleştirebiliriz. Servislerin bir güzelliği de, php, klasik asp, jsp, java vb.. dillerlede çok rahat bir şekilde kullanılması. Ne kadar yazarsam yazayım web servisin nimetlerini uygulamadan görmemiz imkansız. Öncelikle burada ve şurada ki makalelere göz atmanızda fayda var.

Visual Studio 2008′ i çalıştırıp, File / New Project / ASP.NET Web Service
Application
‘ a tıklayıp yeni projemizi oluşturuyoruz.

Karşımıza ilk gelen ekran şu şekilde olacaktır.

Hiç birşey yapmadan projemizi çalıştırıp örneğimizi gözlemliyoruz. (F5) Gördüğünüz gibi karşınıza HelloWorld adındaki işlemimiz geldi. Sayfadaki tasarımıda biz yapmadık otomatik geldi.

HelloWorld işlemine tıkladığımızda Çağır adındaki butonu görüyoruz, alt satırlarda gerekli açıklamalar yer alıyor.

Çağır butonuna tıkladığımızda, karşımıza xml şeklide bir veri geliyor. Hello World değişkeni string olduğu için string olarak geri döndü.

Gördüğünüz gibi çok basit bir yapı. Hemen kendimize bir işlem yazalım ve bilgimizi pekiştirelim. Projemize geri dönüyoruz ve HelloWord un altına yazmaya başlıyoruz. İşlemimiz ad ve soyad kontrolü yapıp geriye bool (true, false) bir değer döndürsün.

    [WebMethod]
    public bool ilkServisimiz(string ad, string soyad)
    {
        bool geriDonecekDeger;
        if (ad == "ali" && soyad == "veli")
        {
            geriDonecekDeger = true;
        }
        else
        {
            geriDonecekDeger = false;
        }
        return geriDonecekDeger;
    }
    //gördünüz gibi klasik c# dan hiç bir fark bulunmuyor.
    //servisde görüntülenecek işlemin kodlarının başına [WebMethod] eklememiz yeterli.

Bu basit yapıda ad ve soyad adında iki stringi alıp kontrol ediyoruz. Eğer istediğimiz bilgiler gelirse true değilse false döndürüyoruz. Projemizi hemen çalıştırıyoruz. HelloWorld şleminin altında ilkServisimiz adındaki işlemi görmüş olmamız gerekiyor. Tıklayıp çalıştırdığımızda bizden ad ve soyad değişkenlerini isteyen bir form görüntüleniyor. ali veli yazıp çağır dediğimizde sonuç true olarak, aksi durumda false olarak dönüyor. İlk servisimiz hayırlı uğurlu olsun :)

Şimdi web servis uygulamamızı web sayfalarımızda nasıl kullanacağımıza bakalım. Hemen Visual Studio 2008 den File / New Web Site diyoruz. Default.aspx sayfamızın içine hemen aşağıdaki gibi basit bir form koyuyoruz.

Ad

<asp:TextBox ID="txtad" runat="server"></asp:TextBox>

<br />

Soyad

<asp:TextBox ID="txtsoyad" runat="server"></asp:TextBox>

<br />

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Gönder" />

<br />

<asp:Label runat="server" ID="lblmesaj" ForeColor="Red"></asp:Label>

Şimdi gelelim web servisimizi web sayfamızda kullanmak için gerekli adımlara.  Solution Explorer dan sağ tuş tıklayıp Add Web Reference diyoruz.

Açılan pencereye oluşturduğumuz web servisin adresini girip Go diyoruz. Karşımıza işlemlerimiz geliyor ve ilkServisimiz adlı işleme tıklıyoruz.

Görüldüğü gibi web servis projemizi çalıştırdığımızdaki ekranlar ile birebir aynı bir arayüz geliyor karşımıza. Web reference name kısmında referans için bir isim giriyoruz. Ben ebreferansim diye giriyorum ve Add Reference ye tıklayıp projeme dahil ediyorum.

Solution Explore baktığımızda APP_WebReferences klasörünün altına gerekli dosyaların geldiğini görüyoruz. Aynı projede birden fazla web servis kullanmamız mümkün.

Default.aspx.cs dosyamıza gidip kodlarımızı yazmaya başlıyoruz. Unutmadan kodlarımızı oluşturduğumuz formdaki butonun onclick özelliğine yazıyoruz.

protected void Button1_Click(object sender, EventArgs e)
{
// servis adındaki nesnemizi oluşturuyoruz.
webreferansim.Service1 servis = new webreferansim.Service1();

//hemen servisimiz içindeki kodları hatırlayalım
//---------------------------------------------------
//[WebMethod]
//public bool ilkServisimiz(string ad,string soyad) {}
//aşşağıdaki satırda, ad ve soyad değişkenlerini aynen methodumuza gönderiyoruz.
bool servistenGeriDonenDeger = servis.ilkServisimiz(txtad.Text, txtsoyad.Text);

//dönen değeri ekrana yazdırıyoruz.
Response.Write("Geri dönen değerimiz: <strong>" + servistenGeriDonenDeger + "</strong>");

//pekiştirmek için basit bir if bloğu
if (servistenGeriDonenDeger)
{
lblmesaj.Text = "Bilgiler doğru !";
}
else
{
lblmesaj.Text = "Bilgiler yanlış !";
}
}

İşte bu kadar gördüğünüz gibi .net ortamında web servis hazırlama ve kullanma işi gerçekten çok basit. Unutmadan burada incelemeye değer çokça servis bulunuyor. Umarım faydalı bir yazı olmuştur, hoşçakalın.

Örnek
dosyaları buradan indirebilirsiniz.

  • emre

    web servisleri konusunda güzel bir referans olmuş, özellikle resimli anlatım sayesinde yeni başlayanlar için de kolaylıkla uygulama şansı veriyor.

  • http://www.egulcu.net Ekrem

    Faydalı bir bilgi ve ihtiyacım olabilecek bir konuyu şu anda öğrendim. Anlatımınız içün teşekkürler.

  • Taner Hacıoğlu

    Basit ama gerçek…Teşekkürler…

  • http://www.tupperwaresakarya.com Semih Eldemir

    Çok teşekkür ederim, ilk servisimi yaptım:D cok işime yaradı .. futbolmerkezinden haftanın maclarını cekmek istiyorum gosterdiginiz yontemle ama zorlandım.. yardımcı olursanız sevinirim ..

  • http://a apoStyLEE

    Rica ederim, işinize yaradıysa ne mutlu, fakat bahsettiğiniz konu ile web servisin alakasını kuramadım. Farklı bir siteden veri çekmek için farklı yöntemler kullanmanız gerekir. Yazdığınız mail adresine size yardımcı olacak bir arkadaşımın iletişim bilgilerini yolluyorum. Kolay gelsin..

  • veli çam

    Teşekkürler, böyle özet bir bilgiye ihtiyacım vardı, çok faydası oldu.

  • http://www.medyumca.com/ medyum

    teşkkler güsel bilgi sitenz çok iyi

  • sukru ergül

    tskler cok faydalı bılgıler.bır sey soracagım forum ve portal sıtelerı yapıyormusunuz.bu konada mailinizi beklıyecegım.

  • İsmail ALTIN

    vb.net ve web servis kullanarak tc kimlik doğrulaması yapmak ile ilgili bilgi yada bir örnek verebilirmisiniz?

    Önemli Not:
    Mernisten tc kimlik doğrulaması, yapılan yeni değişiklik sonucunda statik IP adresi kullanılarak yapılıyor. ve statik IP kullanıcısına kullanıcı adı ve parola verilerek yapılıyor

    Buna göre hazırlanacak kodlarım nasıl olmalı ??

  • http://a apoStyLEE

    @sukru ergül malesef yapmıyorum.
    @İsmail ALTIN tc kimlik doğrulaması üzerine daha önceden hiç çalışma yapmadığımdan konuyu tam olarak bilemiyorum. Ama tc kimlik numarasının basit bir algoritması bulunuyor http://www.kodaman.org/yazi/t-c-kimlik-no-algoritmasi burada arkadaş anlatmış.

  • Serkan Bostan

    TC Kimlik dogrulama web service adresi
    http://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx

  • serdar altundal

    çok Güzel olmuş

  • özlem

    Serkan bey göndermiş oldugunuz web servisi dosyasını inceledim.

    kullanıcının gireceği ad soyad ve dogum yılına göre sorgu yapıyor.

    peki bunun javascript ile consume yani client tarafını da gönderebilirmisiniz.

  • fatih

    Bir projede çıkmaza girmişken bu konu gerçekten ilaç gibi geldi. Tebrikler

  • http://Websitesi Ali

    Merhaba, webservice konusunda yaptığınız uygulama çok güzel. Benim Webservice le ilgili büyük bir sorunum var ve eğer bana yardımcı olursanız cok sevinirim.
    Ben server üzerinde webservice yapıyorum , projeme ekliyorum çalışıyor. fakat client dan ona ulaşamıyorum. çünkü adresi http://localhost:50717/mywebservice/service.asmx gibi localhost adresi oluyor ben buna erişmek için serverın ip sini veriyorum ancak yinede, ulaşamıyorum. Ne yapmam lazım. Server şirketteki bir server, bende şirketteki bilgisayarımdan girmeyi deniyorum. server a ping atabiliyorum .. yani normal erişim konusunda sıkıntı yok. Ama browserdan yazdıgım zaman http://85.196.45.87/mywebservice/service.asmx olmuyor.
    Client dan server daki webservice i nasıl çalıştırabilirm.

    Bu konuyla ilgili bana dönüş yaparsanız çok memnun olurum. Teşekkürler.

    • apoStyLEE

      Merhaba, öncelikle projenizi iis altına uygulama olarak ekliyor musunuz ? Yani kendi bilgisayarınızdan örneğin; 192.168.1.15/projem şeklinde servisini çalıştırabiliyor musunuz ?

  • http://taylan.somee.com taylan

    Benzer bir sorunu bende yaşıyorum, kodlamasını bir türlü bitiremediğim forum projemde sohbet bölümü var, ben webservice ile winform projesinden sohbet bölümüne ulaşmak istedim, servisi forum projesinde oluşturdum ama winform’da add service reference diyorum http://localhost/forumprojesi/serviceismi diyorum servisi görmüyor, acaba birşey eksik mi yaptım ne.

  • http://www.tayfunyasar.com/ Tayfun

    Merhabalar hocam, resim doğrulamalı bir internet sitesinde login olup, loginden sonra bikaç sayfa gezip oradaki verileri çekmem gerekiyor. Bu olayı web servisi ile mi yapacağım yoksa asp.net web app. ile mi? Bu konuda beni yönlendirebilirmisiniz?

    • apoStyLEE

      2 şekilde de yapabilirsiniz, crawler diye aratırsanız sonuca ulaşabilirsiniz. Resim doğrulama olayını nasıl aşarsınız onu bilemiyorum :S

      • http://www.tayfunyasar.com/ Tayfun

        resim doğrulama olayı için iframe gibi siteyi açtırıp öyle yapsam manuel girerim diye düşünüyorum hocam. Ama iframe olursa login olduktan sonra kodları işliyemem sanırım doğrumu? o yüzden böyle bişey mümkünmü acaba?

        • apoStyLEE

          Eğer resimdeki kodu elle gireceksen hiç bir şeyle uğraşma. Winform içine bir tane tarayıcı at (browser) sonra istediğin kısmı al kullan, şurada ki örnekte nasıl elementlerin kullanıldığı anlatılıyor ;) http://stackoverflow.com/questions/5375596/unable-to-get-htmlelement-in-winforms-webbrowser-control

          • http://www.tayfunyasar.com/ Tayfun

            HtmlElement sınıfı asp.net web app’ta yok sanırım hocam. ben asp.net uygulaması yapmayı deniyorum ama en azından derdimi anlatabilmeme sevindim

  • lsa

    tesekkur ederm cok faydalandm
    vb kullanan örneklerinzde var mıdır acaba?

  • Engin

    çalıştığım şirkette web servisler alanına yani atandım ve bu başlangıç aşamasında bu makaleniz bana çok faydalı oldu!Trabzonspor amblemi de ne güzel yakıştı al yıldızımın yanına!sorunlarım olduğunda umarım size sorabilirim!!emeğinize sağlık teşekkür ederiz!

    • apoStyLEE

      Teşekkür ederim :) Buradan sorabilirsiniz, bilgim dahilinde cevap vermeye çalışabilirim :)

  • http://omeroruc.com omer oruc

    Merhabalar bütün gün web servisleri kullanımı hakkında araştırma yaptım bundan önce hiç bir şey bilmiyordum web servisi ile ilgili okuduğum makalelerden biraz bilgi edindim normalde c#ile çalışıyorum bunun için ama çok farketmez genel mantık nasıl yapmam gerektiği konusunda yardımcı olabilirseniz sevinirim. vs2010da yeni proje açıp references -> add service reference -> advanced -> add web reference diyorum ve urlyi giriyorum.bi kaç uygulamayı çalıştırdım inceledim ve anladım biraz örneğin http://www.webservicex.net/globalweather.asmx?wsdl bu urlyi eklediğim zaman bulabiliyor ve ekliyebiliyorum http olanlarda sorun olmuyo olabilir fakat şuan PTT için bir uygulama yapmam gerekiyor. https://interaktifkargo.ptt.gov.tr/topluTakipDetay/topluTakipDetay?WSDL bu urlyi girdiğim zaman güvenlik hatası vs veriyor.

    hata :
    There was an error downloading ‘https://interaktifkargo.ptt.gov.tr/topluTakipDetay/topluTakipDetay?WSDL’.
    The underlying connection was closed: An unexpected error occurred on a send.
    Received an unexpected EOF or 0 bytes from the transport stream.
    There was an error downloading ‘https://interakt

    yardımcı olabilicek varsa çok sevinirim.

  • Şeyma

    Merhaba web servisi çalıştırıyorum fakat localhostta çalışmıyor 127.0.0.1 adresini girmem gerekiyor çağrdığım zaman da yine localhosta yönlendiği için hata veriyor nasıl düzeltebilirim
    ‘/HelloWorld’ içinde URL beklenmedik bir şekilde sonlandığından istek biçimi tanınmıyor.

  • Mustafa YİĞİT

    bilgileriniz için teşekkürler…

    Visual Studio 2010 .NET 4.0 kullanarak yapmaya çalıştım. biraz eklemeler oldu ama sonunda mutlu sona ulaştım…

    Payaşım için tekrar teşekkürler…

  • Kerim Yıldız

    merhaba, şirketim bana, VPN ile bağlanmam için ip adresi vpn kullanıcı adı ve şifre vermiş, şimdi ne yapmam gerekiyor nasıl yapmam gerekiyor, Vpn ile tam olarak ne yapıcam web servislerini nasıl çekerim ? Yardımcı olabilirseniz sevinirim, kolay gelsin.

  • http://www.novruzov.net Emin Novruzov

    Coox sag ol kardewim. Vallahi yeni iwe girdim bi turlu whu web servisin ne iwe yaradigini anlamiyordum. Sonunda senin dersini buldum googleden. Simdi her sey tamamen anlawildi. Cok sagol.

  • veys

    hocam örnek dosya indirme linki çalışmamakta. rica etsek bir kontrol edebilirmisiniz???
    Birde webservis ile iki veritabanını sürekli nasıl senkronize tutabiliriz yani her gece belli bir saatte sqlserver’dan oracle’a sabah saat 6 sularında da tekrar orda işlem görmüş olan veriyi tekrar oracle’dan sqlserver’da başka bir tabloya çektirmek istiyoruz. sizce böyle bişey mümkünmüdür…

  • Ömer

    Çok basit bir anlatım olmuş.Web servis Bu kadar basit bir olay değil.Daha kapsamlı birşey anlatmanızı beklerdim.İnsanlar üzerinde web servisin kolay olduguna dair bir algı oluşturmayın .

  • huseyn

    cok guzel olmus ellerinize saglik

  • http://www.mustafayalcin.net.tr mustafa

    Teşekkürler bizi aydınlattığın için :)

  • harun

    hocam merhaba. internet sitesi üzerinden veri çekme işlemi ile ilgili kaynak bilgi verebilirmisiniz acaba.. Teşekkürler

  • White Developer

    çok yararlı bi makale teşekkür ederim

  • Hüseyin

    Teşekkürler.

  • canan çadırardıç

    Peki ad == “ali” && soyad == “veli” şeklinde yazmak yerine sql e kayıtlı bilgılerı nasıl çekebilirim.ya da bastan bırını sql e kaydetme işlemini? Önerebileceginiz bi kaynak var mı ?

  • ugur ada

    “ASP.NET Web Service Application” olşturabilmek framework olarak 3.5 seçmek gerekiyor.3.5 dan sonraki framework lerde bu seçenek yok.Sormak istediğim 3.5 sonraki Fw lerde bu projenin karşılığı nedir?

  • EKREM

    6 yıl sonunda, yinede faydalı olan bir makale, paylaşımın için teşekkürler (: