19 Eylül 2012 Çarşamba

Delphi DataSnap ve Uygulamaları

Delphi  DataSnap ve Uygulamaları
Her işletim sisteminde çalışan client programları yazmak istiyorum diyorsanız tam yerine geldiniz. Delphi’de DataSnap  bunun için hazırlanmıştır.  DataSnap İnternet yada İntranet üzerinden kullanılabilen platformdan bağımsız olarak serverdan fonksiyonları çağırabilen  uygulamalar olarak nitelendirilebilir. Kısacası datana nerede istersen, nasıl istersen öyle ulaşmanın yolu DataSnap teknolojisidir. Bunu ilgili bir örneği kodları ile birlikte vermek istiyorum. Kodları makalenin sonunda indirebilirsiniz.
DataSnap Tarihçesi
DataSnap teknolojisi ilk olarak Delphi 3 ile Midas teknolojisinin içinde gelmiştir. Delphi 4 te Midas II ve Delphi 5 te Midas III içinde olmuştur. COM tabanlı TCP/IP ve http (D) COM kapasiteli bağlantı ile uzak data bağlantısı kurmanın güçlü bir yolu idi. Delphi 6 da DataSnap ismiyle sunuldu ve Delphi 2007 bu yapı daha da sağlamlaştırıldı.
Delphi 2009 da yeniden DataSnap mimarisi tanıtıldı. Uzak bağlantı sunucu nesneleri ve client bağlantı üretmenin daha kolay yolu sunularak, başlangıçta sadece TCP/IP bağlantısı ile bir de Delphi Prism 2009 kullanarak .NET clientları inşa etme yeteneği ile COM bağımlılığı kaldırıldı.
Delphi 2010 DataSnap 2009 mimarisi üzerine kurulmuştur ve bu yapı yeni işlevseliklerle genişletilmiştir. İki wizard kullanarak yeni hedefleri desteklemeyi kapsayarak (VCL formları, Windows servisleri ISAPI, CGI ve web App Debugger gibi konsol uygulamaları).Daha sonraki sürümlerde (Delphi XE2) 64 bit mimariye geçen Delphi, DataSnap wizardlarını geliştirerek mobil ve masaüstü çözümleri entegre bir biçimde çalışmasını daha da kolaylaştırdı.
DataSnap Kullanmanın Avantajları

Bu çok katmanlı(multi-tier) teknolojide birkaç ana makina (server) kullanılabilir. Örneğin bir server veritabanını saklamak için diğer server uygulama dosyasını yani .exe uzantılı dosyayı çalıştırmak için kullanılabilir. Cilentlarda ayrı akıllı-akılsız terminallar, mobil cihazlar , bilgisayarlar vs. olabilir. Çok katmanlı teknoloji ile pek çok farklı cihazın bir ya da birkaç anamakinadan kontrolu sağlanbilir. Böylelikle maliyetlerden ve zamandan tasarruf edilir.

Delphi uzun zamandır çok katmanlı veri tabanı uygulamaları için gerekli teknolojiyi barındırıyordu. Önceleri MIDAS ve daha sonraları DataSnap olarak bilinen Delphi’nin çok katmanlı tekonolojisi , uzaktan bağlantı soketleri ve http ile sağlansa bile DCOM yerine, COM üzerine kuruludur . Bazen CORBA teknolojisini bile destekler.  Az biraz değişmiş versiyonu SOAP bağlantısı olarak sunulur.
Delphi 2009 ve sonrası halen klasik DataSnap teknolojisini  içermekle beraber yeni  uzaktan ve çok katmanlı teknoloji içeren yeni bir markayı da içermektedir. Kısmi olarak dbExpress mimarisi üzerine kuruludur. Bu yeni teknoloji halen DataSnap olarak adlandırılmaktadır fakat karışıklıklardan kaçınmak adına genelde “DataSnap 2009” “DataSnap 2010” “DataSnap  XE2” “DataSnap  XE3”vs olarak adlandırılmaktadır. DataSnap uygulmaları mutlaka bir anamakine (server) uygulaması olmak üzere, ihtiyaca göre DataSnap desktop client bağlantısı, DataSnap web client bağlantısı ve/veya DataSnap mobile client bağlantısı(Android, Apple iOS,BlackBerry, Windows Phone 7 vs.) olabilir.

İlk DataSnap Demosunu İnşa Edelim
Bu konuda çok detaya girmeden basit üç katmanlı demoya başlamak 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ı DSServerModule de barındıryoruz. Bunun için Delphi 2009 ve öncesi için menüden  File->New->VCL Form Application Delphi seçip (yani standart vcl projesi) yeni proje açalım. Sonra buna yine menüden  File->New->Other->ServerModule eklenmeli ve bir Datamodule eklenmeli.  Delphi 2010 ve sonrası için direkt File->New->Other->Datasnap server(ilk simge) seçilebilir. Böylelikle DataSnap wizardı yardımı ile proje açılmış olur. Delphi 2010 daki wizardı çalıştırırsak şekil 1 deki görüntüyü elde ederiz.




Şekil-1
Ok tuşuna basıldıktan sonra karşımıza Şekil-2 deki pencere çıkacaktır. Bu pencereden hangi seçeneği seçerseniz seçin TDSServer komponentini içeren ServerContainerUnit adlı bir Delphi uniti oluşacaktır. Diğer tüm ek komponentler TDSServer a bağlıdır. Bu komponent server özelliğine sahiptir. Eğer protokol TCP/IP seçilirse Server TDCTCPServerTransport komponenti içerecektir. Eğer iletişim protokolu olarak http seçilirse server TDSHTTPService komponenti içerecektir.

Şekil-2
Bu penceredekilerin anlamaları aşağıdaki tabloda DataSnap Server wizardının seçeneklerini göstermektedir.
Madde
Açıklaması
VCL Forms Application
Bu seçenek işaretlenirse Server yazılımı VCL Forms uygulaması olacaktır.
Console Application
Bu seçenek işaretlenirse Server yazılımı Konsol uygulaması olacaktır.
Service Application
Bu seçenek işaretlenirse Server yazılımı Servis uygulaması olacaktır.
TCP/IP
Haberleşme protokolü, genellikle  TCP/IP olarak bilinen Internet Protokol suiti
HTTP
 Hypertext Transfer Protocol olarak bilinen haberleşme protokolü . HTTP protokolü seçildiğinde Authentication seçeneği aktif hale gelir.
Authentication
Eğer bu seçeneği işaretlerseniz TDSHTTPServiceAuthenticationManager komponenti Serverın olduğu formda yer alır.  TDSHTTPService komponenti TDSHTTPServiceAuthenticationManager i   DataSnap Server için http kullanıcı doğrulama yürütmesine  izin veren  doğrulama yöneticisi olarak  kullanır. Yürütme HTTPAuthenticate olayını yürütmeyi içerir.  When Authentication seçeneği seçildiğinde, clientlarDataSnap kullanıcı adı ve şifresini SQL bağlantı özelliği olarak sağlamaya ihtiyaç duyarlar.
Add Server Methods Class
Server formuna TDSServerClass komponenti eklemek için ve client uygulamalarına server methodlarını göstercek Serverda klas tanımlamasına izin verilmesi için  bu seçeneği işaretleyin.
Ancestor
Bu seçenek Server klasınız için ankestör belirlemeye izin verir. TDSServerModule  Client uygulamalarına serverdan data setleri göstermek için seçiniz. Görsel olmayan komponentleri Server klasınızda kullanmak isterseniz TDataModule ü seçiniz. Sever klasınızı tamamen yürürlüğe geçirmek isterseniz TComponent i seçiniz.
Include sample methods
Eğer bu seçeneği seçerseniz. ServerMethodsUnit, basit bir method olan ve  verilen değeri geri dönen echoString adlı methodu içerir.

Bu wizardın sonucunda üç unit oluşur.
ServerContainerUnit1.pas
DataSnap Server uygulamasının dış dünya açılmasını sağlayan bu form DataSnap serverların olmazsa olmazı üç komponenti içeriyor. TDSServer komponenti uygulamaya Server özelliği verir.
TDSServerClass  komponenti Dinamik method müracatını kullanan uzak client uygulamadan çağırılabilen yayınlanan metodları olan server–taraflı sınıfları belirlemek için kullanılır.
TDSTCPServerTransport   TDSServer için soket-bazlı bilgi iletim  komponentidir.
ServerMethodsUnit1.pas
Bu form uzak bağlantıların çağıracağı fonksiyonların tanımlandığı formdur. Eğer uzak bağlantıya dataset türü geri dönüş değeri olan fonksiyonlar yollanmak gerekiyorsa  bu form TDSServerModule sınıfından seçilir . Delphi 2010 dan sonraki sürümlerde wizardla oluşturan formda “function EchoString(Value: string): string;”  adlı  fonksiyon varsayılan olarak hazır olarak gelmektedir. Bu fonksiyon gelen değeri geri döndürme özelliğine sahiptir. Biz  de deneme maksatlı olarak uygulamamıza “function MerhabaEchoString(Value: string): string;” fonksiyonunu ekleyelim. Bu eklediğimiz fonksiyon yollanan değere merhaba diyerek geri dönüş değerini geri yollar.
function TServerMethods1.MerhabaEchoString(Value: string): string;
begin
  Result :='Merhaba '+ Value;
end;  
AnaFsrv.pas
Bu unit anaformumuz oluyor. Server tarafında program açık iken gözükecek form.Şimdi F9 ile programı derleyelip çalıştıralım ki exe si oluşsun. Server.exe oluştuktan sonra bunu üzerine tıklayıp çalıştıralım.
Bu yeni DataSnap server mimarisi artık COM üzerine kurulu olmadığı için Data Snap server uygulaması 7x24 mantığı ile devamlı server üzerinde çalışacak şekilde açık kalmalıdır.
Bu client tarafını tasarlarken uzak fonksiyonların gözükmesi için gerekli.
Client Tarafı Uygulama Projesinin Oluşturulması
Daha sonra bu grupa sağ tıklayıp new Project ile çıkan diyolagtan VCL Forms Application ekleyerek yeni projeyi Client.dpr olarak adlandırarak ekleyim..Ve bu uygulamanın ana formuna TSQLconnection ekleyelim. F11 basarak Object Inspectörü açalım TSQLconnection komponentinin Driver özelliğinden “datasnap”ı seçelim. Sonra TSQLconnection komponentinin üzerine tıklayıp farenin sağ tuşuna basalım. Ve çıkan menüden (Şekil-3)“Generate DataSnap client Param” kısmını tıklayıp server fonksiyonlarını ve classlarını tanıtan unitin oluşmasını sağlayıp ve bunu UClass.pas olarak saklayalım ve projeye dahil edelim.



Şekil-3

TSqlServerMethod adlı komponentini “Tool palette”teki dbexpress  sekmesinde den alıp forma ekleyelim. TSqlServerMethod uzak fonksiyonları çağırmak için kullanılan bir komponent ve buna çalıtıracağı ServerMethodMerhaba adını verdik.  Object İnspectorden SQLConnection özelliğine formda “ServerConnection” adı ile tanıtılan komponenti yazdık ve ServerMethodName özelliğini oka basarak (Şekil-4)  (server.exe çalışıyor olmasına da dikkat ederek) TServerMethods1.MerhabaEchoString seçtik.



Şekil-4
Formdaki butonun onclick eventinede
procedure TForm3.Button3Click(Sender: TObject);
var
NeGeldi:String;
begin
 ServerMethodMerhaba.CommandText :='TServerMethods1.MerhabaEchoString';
 ServerMethodMerhaba.Params[0].AsString:=Edit2.Text;//fonksiyona Edit.text değeri yolla
 ServerMethodMerhaba.ExecuteMethod ;//uzak fonksiyonun serverda çalışmasına sağla
NeGeldi:= ServerMethodMerhaba.Params[1].AsString;//fonksiyonun geri dönüş değeri
 Edit2.Text:=NeGeldi;
ServerMethodMerhaba.Close; //fonksiyonun çalışmasını bitir
end;

Artık client uzak fonksiyonu çalıştıracak duruma geldi. F9 ile programı çalıştırp exe yi oluşturalım. Proje tamamdır.

Data Snap Demosunu Buradan İndirebilirsiniz.


Bir sonraki yazıda buluşmak üzere hayır dualarınızı bekliyorum.

11 yorum:

Fatih B. dedi ki...

Derli toplu güzel bir özet bilgi olmuş. Allah Razı olsun.

Unknown dedi ki...

Allah razı olsun, güzel bir paylaşım, yazılarınızın devamı dileğiyle.

Unknown dedi ki...

Makalelerinizin tümünü okuyacağım çok güzel sade ve anlaşılır....

mehmet dedi ki...

elinize saglik . cok tesekkurler

BAU dedi ki...

Merhaba
android uygulamadan bir webservise bağlanıp bilgi çekmem gerek nasıl bi yol izlemem gerek

aysenlik dedi ki...

Hepinize yorumlarınız teşekkürler

Webserver olarak kullandığınız makinaya server.exe yi yüklüyorsunuz. Client.exe yi de clientlara. Server.exe yi web servera yüklemek için hizmet aldığınız sağlıyıcı ile konuşun. Sunucuya exe yüklemeye yurdumuzda izin verecek firma var mı bilmiyorum. Eğer izin vermezlerse evinizde ya da iş yerinizde bir web server kurup istediğiniz gibi yönetebilirsiniz. Evinize ya da iş yerinize webe yayın yapacak server kurmak için öncelikle Yer Sağlayıcılığı Faaliyet Belgesi almanız gerekiyor. Ayrıca aktif directory web server kurma vs. işlerinden anlıyorsanız. Bir makinaya kendiniz kurup deneme yapabilirsiniz. Eğer kurmayı bilmiyorsanız internetten konuyu bulup deneye yanlıa kurabilirsiniz.

Yer Sağlayıcılığı Faaliyet Belgesi almak için;

1) https://faaliyet.tib.gov.tr/yetbel/ adresinden kayıt olarak sisteme giriş yapıp buradaki
uygun elektronik formun eksiksiz doldurulması suretiyle başvuruda bulunmak,

2) Yer sağlayıcıları aşağıda belirtilen tanıtıcı bilgilerini kendilerine ait internet ortamında,
kullanıcıların ana sayfadan doğrudan ulaşabileceği şekilde, iletişim başlığı altında, doğru,
eksiksiz ve güncel olarak bulundurmakla yükümlüdür:

a) Gerçek kişi ise; adı ve soyadı, tüzel kişi ise unvanı ve sorumlu kişiler, vergi kimlik numarası
veya ticaret sicil numarası,

b) Adres bilgileri, tüzel kişi ise merkezinin bulunduğu yerin adresi,

c) Elektronik iletişim adresi ve telefon numarası.


3) Başvuru sürecinin işleyebilmesi için istenen belgelerin

Telekomünikasyon İletişim Başkanlığı
İncek mah. Boztepe sok.
NO:125 06836 GÖLBAŞI ANKARA

adresine gönderilmesi gerekmektedir. İstenen Belgeler:

A- Gerçek Kişiler İçin:

A-1) : Başvuru sahibinin ıslak imzalı Başvuru Formu çıktısı.

A-2) : Başvuru Dilekçesi çıktısının ıslak imzalı hali.

A-3) : Başvuru sahibinin Nüfus Cüzdan fotokopisi.


Selamlar

Bay tut dedi ki...

Datasnap ile sql e bağlanıp veri nasıl çekilir (misal: veritabanındaki veriyi gösterme silme vs yapma)
Bunun ilgili küçük bir örnek verebilir misiniz....

...Teşekkürler..

Bay tut dedi ki...

Datasnap ile sql e bağlanıp veri nasıl çekilir (misal: veritabanındaki veriyi gösterme silme vs yapma)
Bunun ilgili küçük bir örnek verebilir misiniz....

...Teşekkürler..

Unknown dedi ki...

Önce Server Kısmında Sql Server ile bir bağlandı kur ben ADOConnection ile kurdum. Sonra ServerMethodlardan sorgu çalıştır ile bir fonction yazdım.
function TDSServerMethods.SorguCalistir(sorgu: string): TDataset;
begin
with QrySorgu do begin
Close;
SQL.Text := sorgu;
Open;
end;

Result := QrySorgu;
end

son olarakta SQLCalıştır procedure
procedure TDSServerMethods.SorguSQLCalistir(sorgu: string);
begin
with QrySorgu do begin
Close;
SQL.Text := sorgu;
ExecSQL;
end;
end;

böylelikle clikten istediğin sql sorgusunu gönderim veri cekiyor istediğim verileri işleye biliyorum.

Unknown dedi ki...

client modulede örnek:

function TSplashFrm.VolitanLogin(var mesaj: string): boolean;
var
myServer : TDSServerMethodsClient; //server proxy we will call
DS : TDataSet;
i : integer;
begin
myServer := TDSServerMethodsClient.Create(DataSnapConn.DBXConnection);

try
DS := myServer.SorguCalistir('Select* from Personel where KullaniciKodu = '''+edUser.Text+''' and Sifresi = '''+edPass.Text+''' and GorevId = 4');
DS.First;

while not DS.Eof do begin
if DS.FieldByName('Adi_Soyadi').AsString <> '' then begin
AKUser := edUser.Text;
AKAdi := DS.FieldByName('Adi_Soyadi').AsString;
AKId := DS.FieldByName('PersonelID').AsString;
result := true;
end;

DS.Next;
end;
if Trim(AKUser) = '' then begin
mesaj := 'Hatalı Giriş!..';
end;
finally
myServer.Free;
end;
end;

Unknown dedi ki...

s.a
hocam aynısını yapıyorum
ClientDataSet1 ' in Active sini True Yaparken

AS_GetRecords method not found in the server method list.
Hatasını veriyor
neden olablir
IDE Version : XE7 c++ Builder

ALLAH GÜZEL İSİMLERİ(ESMAÜL HÜSNA) VE KAİNAT VE KORONA VİRÜSÜNÜN HAYIRLI TARAFLARI

Kuranı kerimde Bakara 180 de"En güzel isimler Allah’ındır; bu güzel isimlerle O’na dua edin, O’nun isimleri hakkında doğru inançtan sap...