Web service ( Web servisleri anlatırken adım adım ADO.NET kurulumundan da bahsedeceğim – Ayrıca standart SQL query’ler ile nasıl web servis hazırlanır ondan da bahsedeceğim)
Web servisler, standart bir yapıda(XML) kullanıcılar veya uygulamalar arasında bilgi alışverişini sağlayan bir yapıdır. Standart bir yapıda olması, onu platform bağımsız yapmaktadır. Örneğin; asp.net ile geliştirilmiş bir webservice java dilinde çağırılıp kullanılabilir, yada tam tersi. Web servislerin okadar geniş bir kullanım alanı vardırki, bunlardan tek tek bahsetmek bir hayli zaman alır. Web servislerin nasıl oluşturulduğunu ve veri alışverişinin nasıl sağlandığını öğrendikten sonra, nerede ne amaçla web servisleri kullanacağınız sizin hayal gücünüze kalımış. Olaya başlamadan birkaç somut örnekle zihninizde webservisler hakkında bir fikir oluşmasını istiyorum.Örnekler;
1) Bir bankanın döviz kurlarını, web servisler aracılığıyla xml formatında sunması. Örneğin dovizkurlari adında bir webservis hazırlıyor. Bu webservisin GetDolarKur() diye methodu var. Biz bu methodla bankanın dolar kurunu xml formatında istediğimiz programlama diliyle alabiliyoruz.
2) Hava durumlarının öğrenilmesi için webservis kullanımı. Devlet meteoroloji işlerinin herkesin kullanabileceği online bir hava durumu methodu oluşturduğunu düşünün. Örneğin ben istanbul’un hava durumunu öğrenmek istiyorum; methodun adı GetIstanbul() olsun. Bu methodu kullanarak herkes istanbul’un hava durumunu öğrenebilir.
3) Bir bankaya websitesi yaptığınızı düşünün. Fakat banka sizin onların veritabanına ulaşmanızı istemiyor. Fakat sizin bankanın veritabanındaki bazı verilere ulaşmanız, veri eklemeniz veya silmeniz gerekiyor. Bu noktada, bankanın sizin için hazırladığı webservisler devreye giriyor. GetCustomer(string TcNo) diye bir method veriyor size. Bu methodla, tc numarasını yazdığınız müşterinin sadece sizin görmenizi istediği verileri size xml formatında gönderiyor. Bir diğer method MemberLogin(string kullaniciAdi, string Sifre) olsun. Kullanıcı sizin yaptığınız websitesinde kullanıcı adı ve şifresini girdiğinde, bu method sayesinde siz kullanıcının kullanıcı adı ve şifresinin doğru olup olmadığını kontrol edersiniz. Örneğin eğer doğruysa bu method size true değeri döndürür ve siz bu noktada diğer işlemleri yapmaya başlarsınız.
4) Yukarıdada dediğim gibi kullanım alanları sizin hayal gücünüze kalmış, örnekler çoğlatılabilir…
Kısa bilgilerden sonra uygulama kısmına geçelim.
Öncelikle birtane asp.net empty web application açın. File / New Project / Asp.net empty web applications. ( bu yol kullandığınız studyoya göre değişebilir.). Daha sonra Add/New Item diyelim.
Daha sonra “WebService” item’ını bulup adını “MyFirstWebService” yaparak “Add” diyiniz.
Web servisimizi projeye ekledikten sonra, açtığımızda aşağadaki gibi bir kod ekranı karşımıza gelecektir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace WebApplication11
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// [System.Web.Script.Services.ScriptService]
public class MyFirstWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
Bu kodda önemli noktaları açıklamak gerekirse.
Eğer bu webservisi bir “script” (örneğin asp.net ajax) ile çağıracaksak, kapatılmış yeşil renkli kodu açmamız gerekecek. Eğer scriptte değil de örneğin asp.net(c#) ta bunu kullanacaksak, kod satırının kapalı kalmasında bir sıkıntı yok.
Eğer webservise dışarıdan(başka bir projeden) ulaşılmak isteniyorsa, yazacağımız her methodun üstüne [WebMethod] yazmamız gerekiyor.
Helloworld isimli method default olarak gelen bir methottur. Buraya biz istediğimiz kadar method yazabiliriz. Örneğin, bir okuldaki öğrencilerin listesini return eden bir method yazabilirirz.
İsterseniz hemen bir method yazalım. Methodumuz şunu yapsın veri tabanındaki “member” tablosundaki verileri bize döndersin. Bunun için öncelikle veritabanında bir member tablosu oluşturalım.
Veri tabanı ile iletişim kurmak için bir framework kullanacağım. Siz isterseniz normal bağlantı kurup, standart sql query’leri ile data çekebilirsiniz. Ben ADO.net kullanıcam. Bunuda aşağada adım adım anlatacağım. Projeye “add”/”new item” diyoruz. Ordan Ado.net i buluyoruz.Bu yol projenin türüne göre farklı olabilir. Projeyi website olarak açanlar için Ado.net daha farklı bir yerde olacaktır.
Arkadaki pencereden “new connection” diyoruz. Daha sonra “server name” localdeki sql’in adını yazıyoruz. Daha sonra oluşturduğumuz veritabanının adını seçiyoruz “DBWebService”. Ok/Next dediğimizde eğer veritabanı yolu ve adında bir sorun yoksa aşağadaki ekran gelecek
Burdan tablomuzu seçiyoruz. “Pluralize …..” seçeneğini seçip finish diyoruz.
Ado.net Entity Data model projemize geldi. Şimdi properties penceresindeki 2 önemli özelliğinden bahsedeyim.
Kırmızı kutudaki verdiğiğimiz isim(DB) veritabanına ulaşmak için bir adonet nesnesi yaratırken kullanacağımız isimdir. Örneğin, DB veritabanı=new DB();
İkinci kırmızı kutudaki isimse bu nesneye ulaşmak için verdiğimiz isimdir. Örneğin; DBNamespace.DB veritabanı=new DBNamespace.DB(). Biz Ado.net’i direk projenin root’una attığımız için nesnemizin başına namespace yazmadan çağırabiliriz( DB veritabanı=new DB(); ). Eğer; örneğin App_Code kılasörünün içerisine atsaydık. Namespace kullanarak DB nesnemize ulaşabilirdik.
Şimdi gelelim webservisimize yeni methodumuzu eklemeye.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace WebApplication11
{
/// <summary>
/// Summary description for MyFirstWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class MyFirstWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public List<Member> GetMembers()
{
DB db = new DB();
return db.Members.ToList();
}
}
}
GetMembers() methodu ile veritabanında oluşturduğumuz member tablosundaki verileri döndüreceğiz. Öncelikle bir DB nesnesi yarattık, daha sonra bu ADO.net nesnesi üzerinden veritabanındaki member tablosuna ulaşarak tümünü return ettik. (Biraz LINQ bilmeniz gerekli). ( ama en başta dediğim gibi bunu standart sql cümleleri ilede yapabilirsiniz. Örnek aşağadaki gibi;)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
namespace WebApplication11
{
/// <summary>
/// Summary description for MyFirstWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class MyFirstWebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public DataSet GetMembers()
{
string query = String.Format("SELECT * FROM Members");
return ExecuteQuery(query);
}
public DataSet ExecuteQuery(string query)
{
SqlConnection con = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=DBWebService;Integrated Security=True");
con.Open();
SqlDataAdapter da = new SqlDataAdapter(query, con);
da.SelectCommand.ExecuteNonQuery();
DataSet dt = new DataSet();
da.Fill(dt);
return dt;
}
}
}
Seçim sizin. İster standart sql kullanırsınız, isterseniz Ado.net gibi bir framework. Her ikisininde avantajları dezavantajları vardır. Ben Ado.net ile devam edeceğim.
Member tablosundaki tüm verileri çeken methodu yazdık. Burda filtrelemede yapabiliriz. Örneğin yazdığımız method parametre olarak “cinsiyet” değerini alır ve ona göre veri dönderir. Sadece erkekleri veya sadece kadınları dönderebiliriz.
Şimdi ise member tablomuza bir member eklememizi sağlayan bir method daha ekleyelim webservisimize.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace WebApplication11
{
/// <summary>
/// Summary description for MyFirstWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class MyFirstWebService : System.Web.Services.WebService
{
//------------------Default helloworld methodu-----------------------------------
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
//--------------Tüm member ları getir-------------------------
[WebMethod]
public List<Member> GetMembers()
{
DB db = new DB();
return db.Members.ToList();
}
//-------------Member Ekleme-------------------------------
[WebMethod]
public bool AddMember(string ad, string soyad, string email, string cinsiyet, string sehir, string ilce)
{
Member member = new Member();
member.Ad = ad;
member.Soyad = soyad;
member.Email = email;
member.Cinsiyet = cinsiyet;
member.Sehir = sehir;
member.Ilce = ilce;
bool result = false;
try
{
DB db = new DB();
db.AddToMembers(member);
db.SaveChanges();
result = true;
}
catch (Exception)
{
return result;
}
return result;
}
}
}
Gördüğünüz gibi “AddMember” isimli method ile member nesnesine ait verileri alıyoruz. Member nesnesini yaratıp veritabanına ekliyoruz. Gözüktüğü gibi webservislerle her şeyi yapabiliriz. Tabiki mevcut methodların bize sağladıkları olanaklar kadar. Mesele burada member getirebiliyoruz, veya ekleyebiliyoruz. Ama bir member silemiyoruz. Yavaş yavaş webservislerin hangi amaçlarla kullanılabileceğini anlıyorsunuz diye umuyorum.
Web servisimiz son halini aldıktan sonra webservisimizi çalıştıralım. Studioda “start debugging” play tuşuna basıyoruz.
Gibi bir ekran karşınıza geldi. Ekranın üst kısmında gördüğünüz gibi webservisimizin içine yazdığımız methodlar geldi. Örneğin “AddMember” fonksiyonuna tıklandığında; otomatik olarak veri girişi yapabileceğimiz alanlar karşımıza geliyor.
Bu ekranda member ile ilgili bilgileri girip “Invoke” butonuna bastığımızda member tablomuza yeni bir member eklenecektir. Eğer ekleme başarıyla sonuçlandıysa return değer olarakda xml formatında true değeri dönderecektir.
“GetMember” methodumuza tıklayıp “Invoke” butonuna tıklarsak, member tablonuzdaki verileri size xml formatında geri egtirir.
Bu yazımda webservis oluşturmadan bahsettim, gelecek yazımda bu webservisleri başka bir projeden nasıl çağırıp kullanabileceğimizi göstereceğim. Örneğin Addmember methodunu başka bir projeden çağırıp, onan member parametrelerini gönderip bir member ekleyeceğiz. Şimdilik bukadar.