Makale Özeti

Kısa süre önce Xml Web Servisleri konusuna giriş yapmış ve detaylıca bilgi içeren yedi yazı ile bu konuya bir açıklık getirmeye çalışmıştık. Şimdi ise aynı konuyu Delphi kullanıcıları için ele almak istiyorum. Her ne kadar mantık aynı kalsa da Delphi Syntax ına ve Borland Delphi Studio ekranına göre konuyu ele almaya çalışacağım.

Makale

Delphi 8 & XML Web Servisleri I

Kısa süre önce Xml Web Servisleri konusuna giriş yapmış ve detaylıca bilgi içeren yedi yazı ile bu konuya bir açıklık getirmeye çalışmıştık. Şimdi ise aynı konuyu Delphi kullanıcıları için ele almak istiyorum. Her ne kadar mantık aynı kalsa da Delphi Syntax ına ve Borland Delphi Studio ekranına göre konuyu ele almaya çalışacağım.

XMl Web Servislerinin temeline şöyle bir göz atacak olursak şu cümleleri hatırlatmak istiyorum:

"Her işte olduğu gibi internette bilgi sağlanması konusunda da işi ehline bırakmak en iyisi. İş yaşamının da bu yönde ilerlediğini söylemek yanlış olmayacaktır sanıyorum. Zira hedeflerinize ulaşmanın en sağlıklı yolu da budur. Çok iyi bilmediğiniz bir iş ile uğraşacağınıza bu işi en iyi şekilde yapanlar ile anlaşır ve siz kendi uzmanlık alanınız olan işe bakmaya devam edersiniz. Misal siz mobilya üreten bir firma iseniz ürünlerinizin taşınması konusunda bir lojistik firması ile, mali işleriniz konusunda bir müşavirlik firması ile anlaşırsınız. Nedeni bunun onların işi olmasıdır. Böylelikle sizin de tüm enerjinizi hedefleriniz doğrultusunda kullanmanızın yolu açılacaktır.

.Net ile beraber hayatımıza yerleşen Web Servislerinin de temelinde bu yatmaktadır. Bir işi en iyi yapan ; "Bu benim işim" diyen siteler tarafından üretilen veriyi kullanarak hem enerji kaybından kurtulursunuz hemde sağlıklı veriler ile çalışmanın rahatlığını yaşarsınız."

XML Web Servileri hakkında genel bilgiye ulaşmak için tıklayınız


Henüz XML Web Servisleri ile tanışmayanlara yukarıdaki linkten burada nelerden bahsedeceğimiz hakkında temel bilgileri okumalarını rica ediyorum. Biz hemen bir proje oluşturmaya başlayarak zaten daha önce bilgisini verdiğim ayrıntılardan kurtulmayı hedefliyoruz.

İlk olarak yapmamız gereken elbette yeni bir proje oluşturmak bu sebep ile
File | New - Other yolunu izliyor ve karşımıza çıkan pencereden "ASP.Net Web Service Application" ı seçiyoruz.



"OK" tuşana basmamızın ardında bize bir message box ile projemize vereceğimiz ismi, yolu ve hangi web server ı kullanmak istediğimizi soran bir pencere çıkacak. Bu pencerede proje ismi için default değer "WebServiceApplication1" , yol için default değer "c:\inetpub\wwwroot\WebServiceApplication1" ve kullanılacak server için de IIS tir. Dilerseniz burada Delphi 8 ile beraber gelen Cassini Web Server ı da kullanabilirsiniz. Bu ekranda gerekli isimleri verip "OK" e basmanızın ardından belirttiğiniz path i kullanan bir virtual directory oluşturulacak ve default dosyalar ilgili dizinde oluşturulacaktır. Yani temel mantık Visual Studio ile aynıdır.

   



Projemiz oluşturulduğuna göre biraz incelemekte fayda var. İlk olarak WebService1.pas dosyasında pasif durumda olan örnek "Merhaba dünya" web servisinin hazırda bulunduğunu göreceğiz. Bu kısım da Visual Studio ile aynı. Syntax farklılıklarının başında ise "<>" işaretleri yerine "[]" kullanıldığını görüyoruz. Delphi 8 esas itibari ile VB değil ama C# a yakınlık gösteriyor Syntax konusunda. Ancak ":=" gibi Delphi standartlarından da vazgeçmemek kaydıyla.
Hemen kodlamaya geçerek bir sonraki yazımızda kullanımını da göreceğimiz web servisimizi yazıyoruz.İlk örneğimiz olması bakımından ben yine "çarpma" fonksiyonunu kullanacağım. Bir sonraki örneğimizde ise biraz daha ilerleteceğiz konuyu.

WebService1.pas a geçerek yeni bir metod oluşturuyoruz ve motodumuz şu kodlardan ibaret:

[WebMethod]
function TWebService1.CarpmaOrnegi(a: integer; b: integer): integer;
begin
   Result := a * b;
end;

Uygulamamızı çalıştırdığımızda karşımıza web servisimizi denememiz için .Net Framework tarafından oluşturulan test sayfası çıkıyor.



Bu ekranda "CarpmaOrnegi" linkine tıklamanız durumunda web servisimizin mantığını oluşturan çarpılacak iki sayıyı girebileceğiniz bir form karşınıza çıkıyor.



Test için gireceğiniz verilerin ardından Invoke tuşuna bastığınızda ise "Web Servisleri" kavramının temeli olan XML veri karşınıza çıkıyor. İşte bundan sonraki yazımızda konu alacağımız Delphi 8 ile XML Web Servislerine bağlanmak ve sorgulama yapmak konusunda bu veri ile işlemlerimizi yürüteceğiz.



Ve yine web servisimiz hakkında detaylı bilgi içeren WSDL dokumanına ulaşmak için .asmx uzantısına ?WSDL ekliyoruz. Karşımıza hazırladığımız web servisimize ilişkin detaylı bilgi veren WSDL dokumanı çıkıyor.



Şimdi biraz daha gelişmiş bir uygulama yapalım ve bir web servisinde iki WebMethod u nasıl kullanabileceğimizi görelim. Bu uygulamada referans olarak Delphi programcılarının yakından tanıdığı Dr.Bob ın bir uygulaması üzerinden gideceğim. Yazacağımız web servisi Fahrenayt ı Celcius a çevirecek. Ve ikinci web method umuzda ise Celcius u Fahrenayt a çevireceğiz.

Başta anlattığım adımlar ile yeni bir Web Service Application oluşturuyoruz ve yazacağımız kod bloğunu şu şekilde oluşturuyoruz.

 [WebMethod]
function TWebService1.Celsius2Fahrenheit(degrees: Double): Double;
const
      AbsoluteZeroCelsius = -273.15;
begin
      if (Degrees < AbsoluteZeroCelsius) then
         raise ApplicationException.Create(Geçersiz sıcaklık birimi);
     Result := 32 + (9 * degrees / 5)
end;

[WebMethod]
function TWebService1.Fahrenheit2Celsius(degrees: Double): Double;
const
      AbsoluteZeroFahrenheit = -459.67;
begin
      if (Degrees < AbsoluteZeroFahrenheit) then
         raise ApplicationException.Create(Geçersiz sıcaklık birimi);
      Result := 5 * (degrees - 32) / 9
end;

Şimdi buradaki kod bloğunu biraz inceleyelim.

[WebMethod] bizim web servislerinde kullanacağımız her method un başında yer alması gereken tag. Bunu bir kural olarak unutmuyoruz.

AbsoluteZeroCelsius ve AbsoluteZeroFahrenheit ile her iki sıcaklık birimi için 0 derecenin karşılığını belirtiyoruz.

raise ile geçersiz bir sıcaklık birimi girildiğinde yani koyduğumuz if şartına aykırı bir durum gerçekleştiğinde verilecek hata mesajını bildiriyoruz.

Result ile XML olarak döndürülecek sonucu belirtiyoruz.




Test sayfamızda bu kez iki adet link belirdi bunun sebebi web servisimizde iki method kullanmış olmamız.



Az önceki örneğimizde olduğu gibi test verimizi giriyoruz ve sonuç bize XML olarak geri dönüyor.



Bir sonraki yazımızda burada oluşturduğumuz web servislerine bir windows application ve bir web sayfasından nasıl erişeceğimizi göreceğiz.

Bu yazımızda yaptığımız örneklere ulaşmak için aşağıdaki linkleri kullanınız.

Çarpma Örneği
Sıcaklık Değişim Örneği