Giriş
Web Servisleri Internet üzerinden yayınlanan ve çağrılabilen bağımsız modüler uygulamalardır. Web servisleri sağlanan hizmetleri açıklamak için iyi tanımlanmış ara yüzler sağlar. Istemci gözatıcılar için Web sayfaları üreten Web sunucusu uygulamalarının aksine, Web Servisleri doğrudan insan etkileşimi için tasarlanmış değildir. Aksine, bunlara istemci uygulamaları tarafından programlama yoluyla erişilir.Web servisleri istemci ve sunucu arasında serbest bir bağlantı sağlamak için tasarlanmıştır. Yani, sunucu uygulamalarının istemcileri belirli bir platform ya da bir programlama dili kullanma ihtiyacı duymaz. Dilin doğal tarzında, arayüz tanımlamaya ek olarak çoklu iletişim mekanizması da tasarlamaya izin verir.
Web servisleri, SOAP (Basit Nesne Erişim Protokolü) kullanarak çalışmak üzere tasarlanmıştır. SOAP merkezi olmayan, dağıtılmış bir ortamda bilgi değişimi için standart hafif bir protokoldür. Uzak yordam çağrıları kodlamak için XML kullanır ve genellikle bir iletişim protokolü olarak HTTP kullanır. SOAP hakkında daha fazla bilgi için, http://www.w3.org/TR/SOAP/ adresindeki SOAP spesifikasyonuna bakın.
Not: Web servislerini destekleyen bileşenler(componentler) SOAP ve HTTP kullanacak şekilde inşa edilmiş olmalarına rağmen,frameworkun(çerçevenin)diğer kodlama ve iletişim protokollerini kullanacak şekilde genişletilecek kadar yeterince geneldir.
Delphi SOAP tabanlı Web Servis uygulamalarını (sunucu) size inşa etmenize izin vermesi yanında , özel bileşenler ve sihirbazlar size web servisleri için istemciler inşa etmenize ya SOAP ya da belge birebir stili kullanıarak size izin verir . Belge birebir stili .Net Web Hizmetlerinde kullanılır.
Web servis uygulamaları arayüzlerde ne bulunduğu bilgisini ve bunları WSDL (Web Service Definition Language-web servisi tanmlama dili) kullanarak nasıl çağırılacağı bilgisini yayınlar. Sunucu tarafında, uygulamanız bir Web servisinizi tanımlayan bir WSDL dokümanı yayınlayabilir. İstemci tarafında, bir sihirbaz veya komut satırı yardımcı programı , ihtiyacınız olan bağlantı bilgisini ve ara yüz tanımlarını size sunarak bir yayınlanmış WSDL dökümanı ithal edebilir. Zaten uygulamak istediğiniz Web sunucusunu tanımlayan WSDL belgesi varsa WSDL belgesi alırken, siz de sunucu taraflı kodu oluşturabilirsiniz ve SOAP istemci ve sunucu taraflı program yazabilirsiniz.
Web servis uygulamaları arayüzlerde ne bulunduğu bilgisini ve bunları WSDL (Web Service Definition Language-web servisi tanmlama dili) kullanarak nasıl çağırılacağı bilgisini yayınlar. Sunucu tarafında, uygulamanız bir Web servisinizi tanımlayan bir WSDL dokümanı yayınlayabilir. İstemci tarafında, bir sihirbaz veya komut satırı yardımcı programı , ihtiyacınız olan bağlantı bilgisini ve ara yüz tanımlarını size sunarak bir yayınlanmış WSDL dökümanı ithal edebilir. Zaten uygulamak istediğiniz Web sunucusunu tanımlayan WSDL belgesi varsa WSDL belgesi alırken, siz de sunucu taraflı kodu oluşturabilirsiniz ve SOAP istemci ve sunucu taraflı program yazabilirsiniz.
SOAP Demosunu İnşa Edelim
Bu konuda çok detaya girmeden sunucu ve istemci yazılımını yazmak faydalı olacaktır Biri server uygulaması ve diğeri client tarafı uygulaması olmak üzere iki uygulama hazırlayacağız. Bunun için .groupproj uzantılı grup oluşturup bu dosyada, bu iki exe yi barındırmak dizayn açısından bize kolaylık sağlayacaktır.
Server tarafı
Uzak bağlantıların erişip çalıştıracağı, uzak fonksiyonları server tarafında barındıryoruz. Bunun için Delphi 2009 ve sonrası için direkt File > New > Other > Delphi Projects > Web Services > SOAP Server Application seçilir Şekillerdeki adımlar sıra ile yapılır.
Şekil -4 teki code generation kısmını işaretlerseniz otomatikman örnek yordamlar ve 3 adet delphi uniti oluşuyor.
Bu diyolagtaki seçeneklerin açıklması aşağıda verilmiştir.
Madde
|
Açıklama
|
Service name (Servis Adı)
|
İstemcilere göstermek istediğiniz web servisin çağırılabilir arayüzünün adını girin. Bu ad ara yüz adı olarak kullanılır. Aynı zamanda uygulama sınıfı adını oluşturmak için kullanılır. Bu nedenle, örneğin, MyWebService yazarsanız wizard MyWebService adlı çağırılabilir arayüz oluşturur ve uygulama sınıfı TMyWebServiceImpl olarak adlandırılır.
|
Unit identifier (Birim tanımlayıcı)
|
Wizardın oluşturacağı ve uygulama sınıfı ve arayüzü içeren unitin adını girin.
|
Generate comments (yorumları oluştur)
|
İsteğe bağlı. Wizard tarafından oluşturulmuş unite kodun ne yaptığını anlatan yorumları ekler. Kullanıcılara kolaylık olsun anlaşılır olsun diye konmuş bu seçenek.
|
Generate sample methods (Basit yordamlar oluştur.)
|
İsteğe bağlı. Wizard tarafından oluşturulmuş unite, örnek kod ekler. Bu kodu kullanabileceğiniz gibi uygulama sınıfı ve çağrılabilir ara yüzün uygulanması ve tanımlanması için bir kılavuz olarak kullanabilirsiniz.
|
Service activation model (Servis aktivasyonu modeli)
|
Drop-down listeden istediğiniz aktivasyon modelini seçin.
|
Bunlardan WebModuleUnit1.pas uniti SOAP bileşenlerinin bulunduğu unittir. Web servisi için gereken bir dağıtıcı ve bir çağırıcı (invoker): çığırılabilen (invokable) arabirimleri ve bunları uygulayan sınıflara ek olarak, sunucu iki bileşen gerekir. (Soap.WebBrokerSOAP.THTTPSoapDispatcher) gelen SOAP mesajları alır ve invoker onları aktarır. Invoker (Soap.SOAPHTTPPasInv.THTTPSoapPascalInvoker), SOAP mesaj yorumlaması onu çağıran invokable arabirimi tanımlar, çağrı yürütür ve cevap mesajı toplanır.
Not: THTTPSoapDispatcher ve THTTPSoapPascalInvoker bir SOAP isteği içeren HTTP mesajları yanıtlamak için tasarlanmıştır. Temel mimarisi farklı dispatcher ve invoker bileşenlerinin ikame ederek diğer protokolleri destekler, ve yeterince geneldir.
Sonra HTTP isteği mesajı SOAP eylem başlığında bu arabirimleri tanımlamak iletileri işlemek için otomatik invokable arayüzler ve uygulama sınıfları, dağıtıcı ve çağırıcıya (invoker) kayıt olur.
Web servisleri de bir yayıncı (Soap.WSDLPub.TWSDLHTMLPublish) içerir. Yayıncılar uygulamasında Web sevislerini aramak için açıklayıcı WSDL dokümanları oluşturarak gelen istemci isteklerine yanıt verir. Bu uygulama müşterilerine Web servisi tanımlayan WSDL belgeleri yayımlamayı sağlar. WSDL yayıncı hakkında bilgi için, bir Web servisi uygulaması için WSDL Belgeler oluşturur.
Not: THTTPSoapDispatcher ve THTTPSoapPascalInvoker bir SOAP isteği içeren HTTP mesajları yanıtlamak için tasarlanmıştır. Temel mimarisi farklı dispatcher ve invoker bileşenlerinin ikame ederek diğer protokolleri destekler, ve yeterince geneldir.
Sonra HTTP isteği mesajı SOAP eylem başlığında bu arabirimleri tanımlamak iletileri işlemek için otomatik invokable arayüzler ve uygulama sınıfları, dağıtıcı ve çağırıcıya (invoker) kayıt olur.
Web servisleri de bir yayıncı (Soap.WSDLPub.TWSDLHTMLPublish) içerir. Yayıncılar uygulamasında Web sevislerini aramak için açıklayıcı WSDL dokümanları oluşturarak gelen istemci isteklerine yanıt verir. Bu uygulama müşterilerine Web servisi tanımlayan WSDL belgeleri yayımlamayı sağlar. WSDL yayıncı hakkında bilgi için, bir Web servisi uygulaması için WSDL Belgeler oluşturur.
Tüm bunları yaptıktan ve açıkladıktan sonra bu hazır oluşan projeye bir de ADO bağlantısı ekleyelim. Bu WebModuleUnit1.pas unitinde eklediğimiz ADOConnection1 componenti ile olsun. Ki databaseden veri okumayı da öğrenmiş olalım. ADOConnection1.ConnectionStringi webde açılacak databasein adına passwordune göre değiştirilmelidir..
Tüm bunlar sonucunda DemoSoapWebServer.dll oluşacaktır. Bu dll web hosta konacak web server olan dll.dir.
Burada default olarak WSDLHTMLPublish1 de http://localhost/ demosoap/ DemoSoapWebServer.dll /wsdl olarak tanımlanmıştır. DemoSoapWebServer.dll programı compile edildikten sonra C:\inetpub\wwwroot\ demosoap klasörüne yüklenmelidir.Ama siz localhost yerine sitenizde de yayınlyabilirsiniz.
Ayrıca iis.exe çalıştırılıp bu dll in kaydı yapılmalıdır. Bunun için Denetim Masasından Yönetimsel Araçları seçip Internet Information Services (IIS) Yöneticisini çalıştırın. Şekil 5 teki gibi sanal dizin ekleyin.Ve şekil 6 da gösterildiği gibi uygulmaya dönüştürün.
iis de ISAPI ve CGI kısıtlamaları ve iis de handeler mapping (işleyici eşlemeleri) bölümünden tanım yapılamalıdır. Bunlar aşağıda şekil 7,8-9 gösterilmiştir.
Eğer iis 7.0 ve üstü ise demosoap sanal dizinin altındaki web.config aşağıdaki gibi değiştirilmelidir. En azından handlers tagı.
<configuration>
<system.webServer>
<directoryBrowse enabled="false" />
<handlers accessPolicy="Read, Write, Execute,Source, Script">
<add name="IDemoSoapWebServer" path="DemoSoapWebServer.dll" verb="*" modules="IsapiModule" scriptProcessor="C:\inetpub\wwwroot\demosoap\DemoSoapWebServer.dll" resourceType="File" allowPathInfo="true" requireAccess="Execute" />
</handlers>
</system.webServer>
</configuration>
Tüm bunlar bittikten sonra internet göz atıcınızı açıp adres çubuğuna
http://localhost/demosoap/DemoSoapWebServer.dll/wsdl/ yazıp enter basın şekil 10 daki görüntü karşınıza çıkacaktır. Ekrandaki butona tıklanıp admin kaydı yapılmalı
Bunların görüntüsü de şekil 10-a-b-c de verilmiştir.
Sonrada IDemoSoapWebservisi yazan tarafı tıklanıp explorerdan save as ile C:\Users\aysen\Documents\IDemoSoapWebServisi.wsdl saklanmalıdır. Eğer netten yayınlanacak servisin olduğu yere Şekil 11 deki gibi kopyalanır. kopyalanır.
Client Tarafı Uygulama Projesinin Oluşturulması
Bu herhangi platformda olabilir. Ama yine Delphi’de gösterdik. Daha sonra bu grupa sağ tıklayıp new Project ile çıkan diyolagtan VCL Forms Application ekleyerek yeni projeyi DemoSoapClient.dpr olarak adlandırarak ekleyim. Sonra Şekil -12 de gösterildiği gibi File > New > Other > Delphi Projects > Web Services >WSDL Importer i seçelim. Sonra şekil 13 te gösterildiği gibi publish ettiğimiz .wsdl uzantılı dosyanın yolunu buradaki yazım kutucuğuna yazalım ve User Name ve passworde windowsta admin hakkına sahip tanımlı kullanıcının user name ve passwordunu yazalım. Böylelikle servisin tanımlı olduğu unit otomatikman oluşacaktır.
Kullanıcı adı ve passworunu yazıp,port ve service özelliklerinden ilgili port ve servisi seçelim.
Böylelikle web servisini kullanıma açmış oluruz.
İki adet butondan echoDouble uzak makinadaki echoDouble fonksiyonu çağırır diğeri ise DB den veri okumayı gösteriyor.
procedure TForm2.BitBtn1Click(Sender: TObject);
var
GelenSayi:Double;
begin
GelenSayi := (HTTPRIO1 as IDemoSoapWebServisi).echoDouble(5);
MessageDlg(FloatToStr(GelenSayi),mtWarning,[mbOk],0);
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
var
DBVeriPersonel:TMyEmployee;
begin
//web serverdaki veri tabanından veri okuyor.
DBVeriPersonel:= (HTTPRIO1 as IDemoSoapWebServisi).DBveriOku(1);
MessageDlg(DBVeriPersonel.FirstName+' '+DBVeriPersonel.LastName,mtWarning,[mbOk],0);
end;
Kodları aşağıdaki linkten çekebilirsiniz.Kodları indir