S.a arkadaşlar
Forumda da çok araştırdım internette de fakt çok açıklayıcı bir kaynak bulamadım. Sorum şu; delphi 7 ile web service nasıl yazılır? Ayrıca server olarak hangi server larda yayınlayabilirim ve cgi olarakmı ? Elinde link veya döküman olan varsa sevinirim. Ve sizce ne kadar verimli olur? selametle...
Delphi ile Web Servis Yazmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- WEB Servisini kendi özel bilgisayarında mı kuracaksın yoksa bir WEB sunucusundan mı ? Ona karar verdin mi ?
- WSDL ile yapabilirsin, CGI olarak yapabilirsin, ISAPI DLL olarak yapabilirsin. Her biri farklı farklı. WSDL ile yaparsan aktif çalışırsın, IIS kurmana gerek kalmaz. Belirlediğin PORT dinlemeye alınır. Diğer leri pasiftir. Çağrılar için WEB Server kurulu olması lazım.
- WSDL öneririm isteren http://en.wikipedia.org/wiki/Web_Servic ... n_Language linkinden inceleyebilirsin...
- WSDL ile yapabilirsin, CGI olarak yapabilirsin, ISAPI DLL olarak yapabilirsin. Her biri farklı farklı. WSDL ile yaparsan aktif çalışırsın, IIS kurmana gerek kalmaz. Belirlediğin PORT dinlemeye alınır. Diğer leri pasiftir. Çağrılar için WEB Server kurulu olması lazım.
- WSDL öneririm isteren http://en.wikipedia.org/wiki/Web_Servic ... n_Language linkinden inceleyebilirsin...
Ben wsdl olarak düşünüyorum. Kendi bilgisayarımda bir veri tabanım olacak ve erişim web servisi ile sağlanacak. Benim merak ettiğim nokta şu. Ben wsdl dosyasını hazırlayıp yayınladığım zaman benim web service mi kullacanak user lar için yine bir server kurmam gerekecekmi? Misal bunu java da yaptığım zaman tomcat kullanıyorum. Acaba tavsiyeniz nedir? Ayrıca burda delphi kodları gene exe mi olacak yoksa cgi olarakmı alacak. Verimli olacakmı? Çok sordum ama kusuruma bakmayın artık 

- Kendi bilgisayarında bildiğimiz tarzda Normal bir Delphi projesi hazırlıyosunuz. Buttonlar veritabanı sorgulama vs. tüm donanımı localde yazıyorsunuz.
- Sonra bunu WebService haline getirmek için
1. TWebModule sınıfından bir Class tanımlanan WebModule hazırlanır. Bu standart bazı fonksiyonlar içerir. Örneğin DefaultHandlerAction yani sizin server'a tanımladığınız fonksiyonlar dışında Explorer ile erişildiğinde nasıl davranacağınızı falan tanımlarsınız. Web CGI yazmışsanız buna aşinasınızdır.
2. Bu WebModule'e size özel fonksiyonları barındırdığınız UNIT'i hazırlıyorsunuz. Bu UNIT sizin dış dünya ile bağlantınızı tanımlıyor olacak. Dışardan erişilecek katman Fonksiyon ve Procedure'lerinizi burada yazıyorsunuz. Bu yazacağınız fonksiyon ve/veya procedure'ler localdeki veritabanından vb. ne isterseniz bilginin dışarı response edilmesini sağlayacak veya dışardan gelen bilgilerin Localde kullanılmasını sağlayacak event'ler gibi düşünebilirsiniz.
- Gerek Server gerekse Client için bu fonksiyonların kütüphane olarak başlık bilgilerinin tanımlı olduğu yardımcı bir SOAPWebServiceIntf uniti hazırlarız. DLL olmasa da aynı yapıyı sergiler. TRemotable sınıfından Class tanımı içerir .
- Hani DLL'de EXPORTS vardır ya burada da aynı şekilde initialization altında; dışarısı ile local arasındaki bilgi alış verişini sağlayacak fonksiyonların, Type tanımları Server'e REGISTER edilir ki bu veri transfer edilebilsin.
3. Indy Bileşenleri kullanıyoruz. IdHTTPWebBrokerBridge UNIT'i kullanıyoruz.
- Server'i çalıştırmak için
1. Create ediyoruz.
2. Web Module sınıfını Register ediyoruz ki fonksiyonlarımız ve type tanımlarımız tanınsın..
3. Dinleyeceğimiz portumuzu tanımlıyoruz...
4. Son olarak Server'i çalıştırıyoruz.
hepsi bu... Basit gibi ama biraz çaba istiyor.
- Başlangıçta sıkıntı yaratacak şey, ilişkili bir grup veriyi bir hamlede transfer edebilmek için TYPE tanımlardık ya hani Delphi içinde; burada da Class tanımlamak gerekiyor. Sanki bir Component yazarcasına Read Write operasyonlarını girmek gerekiyor.
Örneğin :
ile tanımlayıp
şeklinde initialization bloğunda tanımlamak gerekiyor.
- Diğer türlü procedure içinden değer transferinde ve fonksiyon sonucu olarak tek değer döndürme konusunda sorun yaşamazsın..
- Seminer için biraz hazırlık yapmıştım. Konuyu daha iyi ifade edebilmek için örnek bir uygulama hazırlamıştım. Örnek uygulama süpriz olsun istiyordum ama WSDL ile Yarı-Online Chat Projesi idi. Bir konuyu en detaylı öğrenmenin yolu, amacı dışında zorlayıcı bazı unsurları içeren başka yan projelerle incelemek olduğundan buna karar vermiştim.
- İlerleyen zamanda vaktim olursa makaleleştirip kodlarla birlikte yayınlarım.
- Başarılar...
- Sonra bunu WebService haline getirmek için
1. TWebModule sınıfından bir Class tanımlanan WebModule hazırlanır. Bu standart bazı fonksiyonlar içerir. Örneğin DefaultHandlerAction yani sizin server'a tanımladığınız fonksiyonlar dışında Explorer ile erişildiğinde nasıl davranacağınızı falan tanımlarsınız. Web CGI yazmışsanız buna aşinasınızdır.
2. Bu WebModule'e size özel fonksiyonları barındırdığınız UNIT'i hazırlıyorsunuz. Bu UNIT sizin dış dünya ile bağlantınızı tanımlıyor olacak. Dışardan erişilecek katman Fonksiyon ve Procedure'lerinizi burada yazıyorsunuz. Bu yazacağınız fonksiyon ve/veya procedure'ler localdeki veritabanından vb. ne isterseniz bilginin dışarı response edilmesini sağlayacak veya dışardan gelen bilgilerin Localde kullanılmasını sağlayacak event'ler gibi düşünebilirsiniz.
- Gerek Server gerekse Client için bu fonksiyonların kütüphane olarak başlık bilgilerinin tanımlı olduğu yardımcı bir SOAPWebServiceIntf uniti hazırlarız. DLL olmasa da aynı yapıyı sergiler. TRemotable sınıfından Class tanımı içerir .
- Hani DLL'de EXPORTS vardır ya burada da aynı şekilde initialization altında; dışarısı ile local arasındaki bilgi alış verişini sağlayacak fonksiyonların, Type tanımları Server'e REGISTER edilir ki bu veri transfer edilebilsin.
3. Indy Bileşenleri kullanıyoruz. IdHTTPWebBrokerBridge UNIT'i kullanıyoruz.
- Server'i çalıştırmak için
1. Create ediyoruz.
Kod: Tümünü seç
TIdHTTPWebBrokerBridge.Create(Self);
Kod: Tümünü seç
RegisterWebModuleClass(TWebModule_bizimkisi);
Kod: Tümünü seç
DefaultPort := 1024;
Kod: Tümünü seç
Active := True;
- Başlangıçta sıkıntı yaratacak şey, ilişkili bir grup veriyi bir hamlede transfer edebilmek için TYPE tanımlardık ya hani Delphi içinde; burada da Class tanımlamak gerekiyor. Sanki bir Component yazarcasına Read Write operasyonlarını girmek gerekiyor.
Örneğin :
Kod: Tümünü seç
TBilgiler = Class(TRemotable)
private
FBilgi1 :String ;
FBilgi2 :TDate ;
FBilgi3 :Integer ;
FBilgi4 :Boolean ;
published
property Bilgi1 :String read FBilgi1 write FBilgi1 ;
property Bilgi2 :TDate read FBilgi2 write FBilgi2 ;
property Bilgi3 :Integer read FBilgi3 write FBilgi3 ;
property Bilgi4 :Boolean read FBilgi4 write FBilgi4 ;
end;
Kod: Tümünü seç
RemClassRegistry.RegisterXSClass(TBilgiler, 'urn:ARMAN', 'TBilgiler');
RemClassRegistry.RegisterXSInfo (TypeInfo(TBilgiler), 'urn:ARMAN', 'TBilgiler');
- Diğer türlü procedure içinden değer transferinde ve fonksiyon sonucu olarak tek değer döndürme konusunda sorun yaşamazsın..
- Seminer için biraz hazırlık yapmıştım. Konuyu daha iyi ifade edebilmek için örnek bir uygulama hazırlamıştım. Örnek uygulama süpriz olsun istiyordum ama WSDL ile Yarı-Online Chat Projesi idi. Bir konuyu en detaylı öğrenmenin yolu, amacı dışında zorlayıcı bazı unsurları içeren başka yan projelerle incelemek olduğundan buna karar vermiştim.
- İlerleyen zamanda vaktim olursa makaleleştirip kodlarla birlikte yayınlarım.
- Başarılar...
@penguen sanırım hazır kod istiyorsunuz,
http://www.devarticles.com/c/a/Delphi-K ... th-Delphi/
bu örnekle basit bir web servisi yazıp bunu yine örnek olarak başka bir delphi projesinde nasıl kullanabileceğinizi öğrenebilirsiniz.
http://www.devarticles.com/c/a/Delphi-K ... th-Delphi/
bu örnekle basit bir web servisi yazıp bunu yine örnek olarak başka bir delphi projesinde nasıl kullanabileceğinizi öğrenebilirsiniz.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr