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.
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.pasDataSnap 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.pasBu 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.
Formdaki butonun onclick eventinede
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:
Derli toplu güzel bir özet bilgi olmuş. Allah Razı olsun.
Allah razı olsun, güzel bir paylaşım, yazılarınızın devamı dileğiyle.
Makalelerinizin tümünü okuyacağım çok güzel sade ve anlaşılır....
elinize saglik . cok tesekkurler
Merhaba
android uygulamadan bir webservise bağlanıp bilgi çekmem gerek nasıl bi yol izlemem gerek
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
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..
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..
Ö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.
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;
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
Yorum Gönder