Microsoft’un .NET Framework 2.0 ile HTTP üzerinden SOAP iletileri kullanılarak uygulamalar arası iletişimi sağlamak için geliştirdiği Web Servisleri adına ilk teknolojisi olan klasik diye tabir edebileceğimiz .asmx web servisinin ASP.NET üzerinden nasıl oluşturulduğuna bir örnek ile inceleyeceğiz.
Öncelikle Visual Studio‘yu açınız.
“File” menüzüsünden “New Project” seçilerek “ASP.NET Project” uygulamasını oluşturun. Örneğimiz için uygulamamıza “asmxAPISample” adı verilmiştir.
Uygulamamızın şablonunu seçmek üzere ekrana “Template Select” diyalog kutusu gelecektir. Servisimizi oluşturmak için “WebFrom“, “MVC” gibi dilediğiniz şablonlardan faydalanabilirsiniz. Örneğimiz için en sade olan “Empty” seçebilirsiniz.
Örnek uygulamamızın oluşturulan dosyalarına “Solution Explorer” panelinden baktığımızda bir ASP.NET projesinin minimum özelliklerle yürütülebilmesi için en sade halini görebiliriz.
Sırada uygulamıza .asmx Web Servisisinin nasıl oluşturulduğunu görelim. Yapmanız gereken “Solution Explorer” projenizin ismi üzerinde mouse sağ tuşu ile açılan menüde “Add-> New Item” seçmek olacaktır. Seçiminiz için gelecek diyalog kutusunda “Web Service (ASMX)” seçiniz ve servisinize bir isim veriniz. Örneğimiz için “SampleService.asmx” ismi kullanılmıştır.
Projemize uzantısı asmx olan bir dosyanın eklendiğini görebilirsiniz. Bu dosya açınız.
Servis dosyamızın kodlarını incelediğimizde aynı isme sahip bir sınıfın (class) oluşturulduğu ve System.Web.WebServices isim alanında (namespace) bulunan WebService sınıfından örneklendiğini görebilirsiniz. Uygulamamızda asıl ilgileneceğimiz kısım oluşturulan sınıf içinde yeralan [WebMethod] lardır. Bildiğiniz klasik metodlardan hiç bir farkı olmamakla bereber tek fark bunların [WebMethod] referansına sahip olmaları ve HTTP üzerinden çağırılabiliyor olmalarıdır.
Eklediğimiz asmx web servisinin içinde örnek olarak geriye string bir ifade döndüren “HelloWorld()” isimli bir şablon web method bulunmaktadır. Şimdilik bu haliyle uygulamızı çalıştıralım.
Görüldüğü üzere localhost üzerinde çalıştırılan servisi herhangi bir browser üzerinden izleyebilirsiniz. Servisi ön izlemek için bir sayfa üzerinden hizmet sunulmuştur. Hizmeti çalıştırmak için HelloWorld() isimli web method üzerine tıklayın ve test ediniz.
HelloWorld() isimli web method’un servis üzerinden çağırılması (invoke) ile aşağıdaki gibi bir xml çıktısının döndürüldüğünü görebilirsiniz.
1 2 3 4 |
<?xml version="1.0" encoding="UTF-8"?> <string xmlns="http://tempuri.org/">Hello World</string> |
WebMethod ile XML çıktısı arasındaki ilişkiyi inceleyecek olursak method’dan return edilen string ifadenin XML sonuç belgesinde <string></string> etiketleri arasında döndürüldüğünü görebilirsiniz.
Şimdi tekrar projemize dönelim ve servisimizin işleyişini daha iyi anlamak için temel tipleri kullanarak basit web metodlar oluşturalım ve servis çağrılarının nasıl çalıştığını inceleyelim.
SampleService.asmx dosyasını aşağıdaki gibi düzenleyiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class SampleService : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] public string Kimsin(string Ad) { //Parametre olarak verilen ismin başına "Merhaba" ifadesini yerleştirip geriye döndüren metod return "Merhaba " + Ad; } [WebMethod] public bool UyeKontrol(string kullanici,string sifre) { // Aldığı iki parametreyi sabit değerler ile kıyaslayıp geriye bool bir değer döndürür. bool kontrol = false; if(kullanici=="Admin" && sifre=="1234") { kontrol = true; } return kontrol; } } |
Servisimizi tekrar çalıştıralım.
Web metodlarımızın listesini görebiliyoruz. Sıra ile test ediniz.
Web metod çağırdığımızda HTTP üzerinden servise adresinde metoda özgü olduğunu görebilirsiniz.
HelloWorld Metodu için “https://yazilimbilisim.net/SampleService.asmx/HelloWorld”
Kimsin Metodu için “https://yazilimbilisim.net/SampleService.asmx/Kimsin”
UyeKontrol Metodu için “https://yazilimbilisim.net/SampleService.asmx/UyeKontrol”
WebMetod’lar ile kendi özel sınıflarımızın (class) kullanımına inceleyelim.
Örneğimiz için öncelikle projemize “Insan” adında aşağıdaki şekilde bir sınıf ekleyelim.
Insan.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
public class Insan { int _id; string _adSoyad; string _tel; public int Id { get { return _id; } set { _id = value; } } public string AdSoyad { get { return _adSoyad; } set { _adSoyad = value; } } public string Tel { get { return _tel; } set { _tel = value; } } } |
Servis tarafında ise geriye bir nesne vaya nesne koleksiyonu (dizisi) döndürecek çeşitli web metod örneklerini aşağıda verildiği şekilde düzenleyiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class SampleService : System.Web.Services.WebService { List<Insan> kisiler = new List<Insan>() { new Insan() {Id=0,AdSoyad="Suat",Tel="2125555555" }, new Insan() {Id=1,AdSoyad="Hakan",Tel="2124344444" }, new Insan() {Id=2,AdSoyad="MEhmet",Tel="2121212122" }, }; [WebMethod] public Insan KisiGetir(int id) { return kisiler[id]; } [WebMethod] public List<Insan> KisiListesi() { return kisiler; } } |
“KisiGetir” isimli web metodumuzda kendisine parametre olarak verilen “id” değerine sahip bir “Insan” tipinde nesne döndürmektedir. İlk testimizi “KisiGetir” metodumuz için gerçekleştirelim.
Web Metod çağrısından dönen değerin nesne özelliklerine uygun bir biçimde etiketleme yapılarak tek bir nesne olarak sunan XML belgesi olduğunu görürsünüz.
1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8"?> <Insan xmlns="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Id>1</Id> <AdSoyad>Hakan</AdSoyad> <Tel>2124344444</Tel> </Insan> |
Sırada geriye her bir elemanı “Insan” tipinde olan koleksiyon döndüren “Kisiler” metodunu test edelim.
Web Metod çağrısından dönen değerin List<Insan> arayüzüne uygun <ArrayOfInsan>…</ArrayOfInsan> etiketleri altında <Insan> nesneleri olduğunu görüyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?xml version="1.0" encoding="UTF-8"?> <ArrayOfInsan xmlns="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Insan> <Id>0</Id> <AdSoyad>Suat</AdSoyad> <Tel>2125555555</Tel> </Insan> <Insan> <Id>1</Id> <AdSoyad>Hakan</AdSoyad> <Tel>2124344444</Tel> </Insan> <Insan> <Id>2</Id> <AdSoyad>Mehmet</AdSoyad> <Tel>2121212122</Tel> </Insan> </ArrayOfInsan> |
Sonuç olarak gerek temel tiplerin, gerek özel tiplerin (sınıf kullanarak) bu bir koleksiyon türüde olabilir, servis tarafından uygun bir biçimde etiketlenerek XML belgelerine dönüştürüldüklerini görüyoruz.
Bu yazımızda ele aldığımız örnek uygulamızı buradan indirebilirsiniz
Bu aşamaya kadar bir Web Servisinin ASP.NET çatısı altında nasıl yapılandırıldıklarını, nasıl test edildiklerini gördük. Ancak Web Servislerinin bir API olduğu ve bunların bir insan tarafından değilde başka bir yazılım tarafından tüketilmek üzere projelerimize entegre edildiklerini hatırlayacak olursak, sırada Web servislerimizi tüketecek istemci uygulamaların servis noktası ile nasıl iletişime geçecekleri ve verileri ne şekilde edineceklerine dair diğer örneklerimize göz atabilirsiniz.
projemde web service yazmam lazım fakat veri tabanı (sql server vs.) kullanılmıycak xml den gelen verilleri verileri kullanarak bir response dödürcem bu işlam hakkında biligisiolan var ise yardımcı olabilirmi
xml dosyasını filestream ile okuyup servis uzerinden göndermelisin. işlemin daha hızlı ve senkron olmasını istiyorsan nodejs ile bir web servis kurup aynı sekilde gerceklestirebilirsin
Yardımınız için teşekkür ederim
anlatımınız çok iyi çok işime yaradı. çok teşekkür ederim.
Çok güzel anlatım çok teşekkür ederim bu oluşturduğumuz servisi C# konsol veya form üzerinden nasıl kullanabiliriz acaba ? Hizmet Başvurusu ekle kısmından local oluşturduğum servisin url’sini giriyorum görüyor içindeki olayları ama kullanmayı çözemedim henüz 😀
[…] […]