Merhaba arkadaşlar bu makalede XML Web Servislerin ne işe yaradığından, özelliklerinden ve nasıl kullanıldığından bahsetmek istedim.
- XML Web Servisler ortam bağımsızdır.
Yani Windows ,Linux vb. hiç farketmez bütün ortamlarda çalışırlar.Sebebi ise XML yani metinsel olmalarıdır.
- XML Web Servisler ortak erişim merkezi gibi düşünüle bilir.
Yani XML Web Servisler bir noktada durur ve bir çok istemci bu noktaya ulaşarak işlem gerçekler.
XML Web Servisler Ne İşe Yarar?
Web servisler günümüzde veritabanımızda bulunan verileri farklı yerlerde kullanmak ve farklı yerlerden yönetmek amacı ile kullanılır.
Örneğin bir sigorta şirketiyiz ve acentalarımız var, acentalarımızın sigorta satışı yaptıklarında sigortalı bilgilerini direk bizim sistemimize kayıt etmesini istiyoruz.
Bunun için bir XML Web servis yazarız.Acentamız kendi kullandığı yazılıma bizim web servisimizi entegre eder ve her sigorta satışında bizim yazmış olduğumuz web servisteki gerekli metodu kullanarak direk bizim veri tabanımıza verileri aktarır.
Nasıl Kullanılırlar ve Özellikleri Nelerdir?
Öncelikle web servislerin özelliklerinden bahsedelim,
Visual Studiomuz ile bir web uygulaması oluşturalım ve daha sonra web uygulamamıza bir web servis ekliyelim.
Resimde de gördüğümüz gibi web servislerin uzantıları .asmx’tir.Ayrıca web servislerin kod yani .cs kısımları ise uygulamamızın App_Code klasörü altında bulunur.
Şimdi gelelim web servisimizin kod kısmında web servislerin özelliklerinden bahsetmeye ve örnekler yapmaya.
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
//WebService Özellikleri
//Namespace : Web servisinizi kendi makinenizde test edebilmek için gerekli olan linktir. Aslında local makinede bir yeri adresler.
//Name : Web servisinizin adını yazacağınız özelliktir
//Description : Web service ne iş yapar onunla ilgili bilgi
//WebServiceBinding : 2 secenek vardır. 1 BasicProfile temel profil yani varsayılan ayarlar ile service calısır. None bolumu ise web service içerisinde ozel işlemler yaparken getirilmesi gereken moddur..
//Web Service Temelleri
//- Soap(simple object acces protocol)
//- Wsdl
//- UDDI
//- disco- discomap
[WebService(Namespace = "http://tempuri.org/", Name = "WebServiceOrnekleri", Description = "Web Servis Metodları için Örnekler")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebServisim : System.Web.Services.WebService
{
public WebServisim()
{
}
//WebMethod: Eğer WebServiste yazacağımız metodların başına WebMethod eklemezsek Web servis çalışmaz
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
//1- Description : Methodun ne iş yapacağı ile ilgili bilgi verir.
[WebMethod(Description = "Bu Metod Giriş Karşılaması Yapar")]
public string Hello()
{
return "Merhaba Hoşgeldiniz";
}
//2- MessageName : tek kelime ve string olmak zorundadır. soap mesajınız içerisinde xml tanımlamanın adıdır. varsayılan olarak classınızın adıdır. aynı zamanda methodları overload yaparken bu adlar değiştirilmelidir.
[WebMethod(MessageName = "A")]
public string Selamla(string parGelenKisi)
{
return "Hoşgeldiniz Sayın : " + parGelenKisi;
}
//3- EnableSession : Varsayılan olarak webmethod içerisinde session kullanımı kapalıdır.İçeriside session kullanırsanız hata alırsınız. Bunun için true yada false diyerek açılım yapılır.
[WebMethod(EnableSession = true)]
public int SayiArttir()
{
if (Session["sayi"] == null)
{
Session["sayi"] = 1;
return Convert.ToInt32(Session["sayi"]);
}
else
{
int gelenSayi = Convert.ToInt32(Session["sayi"]);
gelenSayi += 1;
Session["sayi"] = gelenSayi;
return gelenSayi;
}
}
//4- CacheDuration : Ön bellekleme süresi olarak adlandırılır.Performansı arttırmak için uygulanan en onemli yöntemdir.Saniye cinsinden değer verilir.
//Kaç saniye verildi ise web metodtan dönen sonuc cache'de okadar saniye kalır.
[WebMethod(CacheDuration = 100)]
public string ProjeAdi()
{
return "Web Servis Örnek Uygulaması";
}
//5- BufferResponse : Servis clienta bilgiyi göndermeden önce biraz bilgi birikimi yapar.Büyük dosyaların transferinde bu problem oluşturacaktır, çünkü yavaşlama sebebidir.Büyük nesneler ile uğraşırken bilgilerin size direkt yollanması için bu ayar false a cekilir.
[WebMethod(BufferResponse = false)]
public string BuyukVeriTransferi()
{
return "Büyük Verilerin Gönderimini yapacaksak bu özelliği false'a çekiyoruz böylelikle veri gönderimi direk gerçekleşir.. ";
}
//6- Transaction : Sqldeki transaction işlemlerinin web method içerisinde de olabilmesi için bu ayarın açılması gerekir.
[WebMethod(TransactionOption = System.EnterpriseServices.TransactionOption.RequiresNew)]
public string TransactionYontemi()
{
return "Ado.Net Transaction kodları artık bu metodta çalışacaktır.";
}
///<summary>
/// Güvenlikli (Soap Header'lı) Web Servis Örneğidir
/// Kişinin Kullanıcı Adını ve Şifresini alır
/// Eğer kullanıcı adı ve şifresi dogru ise gerekli işlemleri yapar
/// soapheader : servisin calısabilmesi için kullanıcıdan alınması gereken ön bilgilerin tamamı
///</summary>
public Kisi insKisi = null;
[WebMethod(Description = "Güvenlik için Kişinin Kullanıcı Adı ve Şifresi Girilmelidir"), SoapHeader("insKisi", Required = true)]
public string GuvenlikMesaji()
{
if (insKisi.KullaniciAdi == "admin" && insKisi.KullaniciSifre == "123456")
{
return "Kullanıcı adı ve şifre bilgileri doğru.Veri tabanı işlemleri yapılabilir.";
}
else
{
return "Kullanıcı adı ve şifre bilgileri yanlış.Veri tabanı işlemleri yapılamaz.";
}
}
}
Yukarda gördüğümüz gibi aslında web servislerin normal classlardan cok fazla farkı yok.Sadece Class yerine Web servis ekliyoruz metodları yazarkende metodların başına [WebMethod()] ekliyoruz.
Bu arada yukarıda güvenlikli web servis metodumuzda kullandığımız Classıda oluşturalım.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Services.Protocols;
//Web Servislerde güvenlik anahtarı kullanabilmek için gönderilecek sınıfın(Class'ın)
//Soap Header Sınıfından Kalıtım alması gerekmektedir.
//using System.Web.Services.Protocols; eklenmelidir
public class Kisi:SoapHeader
{
public Kisi()
{
}
///<summary>
/// Kişi bilgileri
///</summary>
#region Varaibles
private string _KisiAdi;
private string _KisiSoyadi;
private string _KullaniciAdi;
private string _KullaniciSifre;
#endregion
///<summary>
/// Kişi bilgileri get,set özellileri
///</summary>
#region Properties
public string KisiAdi
{
get { return _KisiAdi; }
set { _KisiAdi = value; }
}
public string KisiSoyadi
{
get { return _KisiSoyadi; }
set { _KisiSoyadi = value; }
}
public string KullaniciAdi
{
get { return _KullaniciAdi; }
set { _KullaniciAdi = value; }
}
public string KullaniciSifre
{
get { return _KullaniciSifre; }
set { _KullaniciSifre = value; }
}
#endregion
}
Web projemizi çalıştırıp WebServisim.asmx yolunu çağırdığımızda web servisimize yazmış olduğumuz metodlar karşımıza çıkacaktır.

Şimdi gelin default sayfamıza 2 Button yerleştirip guvenlik metodumuzu doğru ve yanlış bilgilerle test edelim.

Kod kısmımız ise aşağıdaki gibidir.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnGuvenlikDogru_Click(object sender, EventArgs e)
{
//Web servisimizin soap headerlı metodunu (GuvenlikMesaji()) çağıralım ve dönen mesajı ekrana yazdıralım
//Web servisimizden bir instance alalım
WebServisim ws = new WebServisim();
//Guvenlik mesajı bizden Kişi sınıfının bilgilerini doldurmamızı istiyor
//Kişi bilgilerini dogru giriyoruz
ws.insKisi = new Kisi();
ws.insKisi.KisiAdi = "Onur";
ws.insKisi.KisiSoyadi = "Yılmaz";
ws.insKisi.KullaniciAdi = "admin";
ws.insKisi.KullaniciSifre = "123456";
string donenMesaj=ws.GuvenlikMesaji();
Response.Write(donenMesaj);
}
protected void btnGuvenlikYanlis_Click(object sender, EventArgs e)
{
//Web servisimizin soap headerlı metodunu (GuvenlikMesaji()) çağıralım ve dönen mesajı ekrana yazdıralım
//Web servisimizden bir instance alalım
WebServisim ws = new WebServisim();
//Guvenlik mesajı bizden Kişi sınıfının bilgilerini doldurmamızı istiyor
//Kişi bilgilerini yanlış giriyoruz
ws.insKisi = new Kisi();
ws.insKisi.KisiAdi = "Onur";
ws.insKisi.KisiSoyadi = "Yılmaz";
ws.insKisi.KullaniciAdi = "admin";
ws.insKisi.KullaniciSifre = "123456789";
string donenMesaj = ws.GuvenlikMesaji();
Response.Write(donenMesaj);
}
}
Umarım yararlı olmuştur.
Bir sonraki makalede görüşmek üzere,
İyi günler dilerim.