WebMatrix ile XML Web Servisleri
NEDEN XML WEB SERVİSLERİ?
Artık internet o kadar genişlediki, bu genişlemeye paralel olarak birçok farklı sistem ve yeni teknoloji ortaya çıktı. İnternet üzerinde birbiri ile haberleşmesi gereken sunucuların ve platformların sayısı giderek arttı. Örneğin aynı platform üzerinden hizmet veren iki veya daha fazla sunucudan biri Windows 2000 server iken biri Unix bir sistem olduğunda, bu iki sistemin birbiri ile haberleşmesi .NET 'ten önce problem yaratabiliyordu.
Web Servislerinin geri döndürdüğü sonuç XML olduğundan, her türlü sistem web servisinin döndürdüğü değeri rahatlıkla okuyabilir. Yani artık .NET ile uygulamalarımızı PI (Platform Independent - Platformdan Bağımsız ) hale getirebiliriz.
Örneğimize Başlayalım...
Gerekli Araçlar
1.IIS 5.0 veya daha üstü
2.SQL Server 7.0 veya 2000 Developer Edition
3.WebMatrix ( http://www.asp.net ten ücretsiz tam sürümü indirebilirsiniz )
İlk olarak wwwroot klasörü altında ornek adlı klasörümüzü oluşturup, sonra da IIS 'ten de bu klasörümüzde uygulama geliştirmek için sanal dizin oluşturup sanal dizinimizin adına da ornek diyor dosyanın fiziksel yolunu da seçtikten sonra tamam'ı tıklıyoruz.
Tabi bu işlemleri yaparken ornek sanal dizinine çalıştır iznini de vermek zorundayız.
Şimdi sıra Sql Server veritabanımızı oluşturmaya geldi. (local) server üzerinde ornek adında bir veritabanı oluşturalım ve veritabanın içinde şekildeki gibi ogrenciler tablosunu oluşturalım.
Evet şimdi WebMatrix'i açıp CTRL+New diyerek wwwroot/ornek/dnm.asmx dosyamızı oluşturuyoruz. Bunu yaparken de Language olarak Visual Basic.NET , Class olarak Vericlass, Namespace olarak da Verinamespace giriyor ve tamam diyoruz.
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
Imports System.Xml.Serialization
Public Class vericlass
Public Function sorgu(ogr_no As Integer) As DataSet
Dim conn As New SqlConnection("server=(local); database=ornek; trusted_connection=true;")
Dim sql_str As String="select * from ogrenciler where ogr_no=" & ogr_no
Dim ds As New DataSet
Dim adapter As New SqlDataAdapter(sql_str,conn)
adapter.Fill(ds,"ornek")
return ds
End Function
End Class
Kısaca kodumuzu incelersek, 1.satırda sayfanın bir webservice, dilinin ise visual basic, class ın ise vericlass olduğunu bildirdikten sonra, tek tek kodumuz için gerekli olan namespace'leri import ediyoruz. Bunlardan 2. 5. ve 6. satırdaki namespaceler en basit webserviste bile bulunması gereken namespaceler, biz özel olarak SQL Server database'ine gireceğimiz için 3. ve 4. satırdaki namespaceleri ekledik.
Daha sonra vericlass ın altında tanımladığımız sorgu isimli fonksiyonumuza ogr_no değişken adıyla tamsayı bir değer geleceğini ve fonksiyonunda cevap olarak bir dataset göndereceğini söylüyoruz. Evet biraz ilginç, alıştığımız fonksiyon tanımlamalarına pek benzemiyor. Yani bir string ya da bir integer.. ifade döndürmüyor bir dataset döndürüyor. Bunun anlamı çok çok fazla. Bu sayede artık yapacağımız uygulamalarımız çok daha programatik bir yapı kazanıyor. Bu fonksiyon sayesinde aldığınız dataset'i istediğiniz gibi kullanma hakkına sahipsiniz.
Daha sonra basit olarak 13. satırda güvenilir bir sql server bağlantısı yapıyoruz. Tabi bu örnek deneme amaçlı olduğu için herhangi bir uid ve password belirtmedik.
Hemen ardından ogrenciler tablosundaki gönderilen ogr_no değişkenine sahip olan veriyi yakalamak için gerekli sql cümleciğimiz var.
17.satırda ds adında bir dataset yaratıyoruz. 19.satırda da veritabanı ile bağlantısız çalışmamızı sağlayan sqldataadapter'ımıza sql_str ifadesini conn bağlantısı ile çalıştırmasını ve 21.satırda da adapter'ın "ornek" adlı dataset 'ini doldurmasını söylüyoruz ve dataset 'i geri gönderiyoruz. Hepsi bu...
Şimdi browser 'ımızı açıp ornek.asmx dosyamızı çağırıp deneme yapabiliriz. Burada .net framework bizim için bir Web Servis Kontrol sayfası hazırlamış olacaktır. sorgu isimli linke tıklayarak (yarattığımız fonksiyonun adı) bildiğimiz bir ogr_no girip bu sorguyu invoke edip (çalıştırıp) sonucun XML olarak döndüğünü görebiliriz.
İşimiz daha bitmedi. Yukarıda dikkat edersek Service Description adlı bir link var. Bu linke tıkladığınızda yapmış olduğumuz ornek.asmx dosyamız hakkında detaylı bilgi içeren bir xml sayfası göreceksiniz. Bu sayfa WSDL yani Web Service Description Language. Bu xml sayfasıını ornek.asmx hakkında detaylı bilgi veren bir dosya gibi düşünebiliriz. Bu dosyayı yine wwwrootornek klasörümüz içine farklı kaydet deyip ornek.wsdl olarak kaydedelim.
Sıra geldi oluşturduğumuz ornek.wsdl dosyasından yararlanarak artık yaratmış olduğumuz fonksiyonu kullanmamızı sağlayacak olan bir Proxy Class yani DLL dosyamızı yaratmaya. Bunun için WebMatrix'de tools/WebService Proxy Generator 'ı açıp aynen aşağıdaki gibi yazalım ve Generate edelim.
Artık ornekinmyproxyclass.dll dosyamızı yarattık (Bin dosyasını kendi oluşturuyor). Hem de fonksiyonumuzu işlevsel olarak ne yaptığını anlatan myproxyclass.vb dosyamızı oluşturduk. Tüm bu yapılanlardan sonra myproxyclass.dll dosyası kullanılmaya hazır hale geliyor. Artık kendi namespace'imizi sayfaya import edip daha sonra da assembly name'i (yani *.dll dosyamızın adı) belirterek uygulamalarımızda kullanabiliriz. Şimdi de bu Proxy Class 'ı kullanacak ornek.aspx dosyamızı oluşturmaya.Ben çok basit bir sayfa hazırladım siz daha detaylı bir sayfa da yapabilirsiniz.Kısaca Sub..End Sub kısmında ne yaptığımızı söylersek önce yordamımız klik adlı event, uygulamadan çağrılınca gerçekleşecek. Kendi yazdığımız vericlass class 'ından veri adında yeni bir class oluşturuyoruz. Sayfamızda datagrid1 adında bir DataGrid objemiz var ancak default olarak invisible (görünmez) önce bunu görünür hale getiriyoruz. Daha sonra textbox1 'den aldığımız değeri Sorgu fonksiyonu ile çalıştırıp döndürdüğü değeri (biz dataset döndürdüğümüz için bunu datasource yapma şansımız var) datagrid1'in datasource'u olarak tanımlıyoruz. Son olarak tüm bu dataları databind() ile datagrid1'e bağlıyor ve yordamımızı sonlandırıyoruz. Kodları:
Sub klik(obj As Object,e As EventArgs)
Dim veri As New vericlass
datagrid1.Visible=true
datagrid1.DataSource=veri.sorgu(textbox1.Text)
datagrid1.DataBind()
End Sub
XML Web Servis Deneme Sayfası
Uygulamamızın en son hali..
