Delphi ile Web Servis Yazmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cenkay
Üye
Mesajlar: 5
Kayıt: 04 Nis 2006 10:51

Delphi ile Web Servis Yazmak

Mesaj gönderen cenkay »

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...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- 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...
Resim
Resim ....Resim
cenkay
Üye
Mesajlar: 5
Kayıt: 04 Nis 2006 10:51

Mesaj gönderen cenkay »

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 :)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- 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.

Kod: Tümünü seç

TIdHTTPWebBrokerBridge.Create(Self);
2. Web Module sınıfını Register ediyoruz ki fonksiyonlarımız ve type tanımlarımız tanınsın..

Kod: Tümünü seç

RegisterWebModuleClass(TWebModule_bizimkisi);
3. Dinleyeceğimiz portumuzu tanımlıyoruz...

Kod: Tümünü seç

DefaultPort := 1024;
4. Son olarak Server'i çalıştırıyoruz.

Kod: Tümünü seç

Active := True;
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 :

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;
ile tanımlayıp

Kod: Tümünü seç

  RemClassRegistry.RegisterXSClass(TBilgiler,           'urn:ARMAN', 'TBilgiler');
  RemClassRegistry.RegisterXSInfo (TypeInfo(TBilgiler), 'urn:ARMAN', 'TBilgiler');
ş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...
Resim
Resim ....Resim
penguen
Üye
Mesajlar: 93
Kayıt: 31 Mar 2006 11:58

Mesaj gönderen penguen »

Arkadaşlar,
delphi ile web servisi yazmak istiyorum fakat sitede yeteri kadar bilgi yok. Makalelere baktım ama bulamadım yardımcı olur musunuz?
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

@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.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla