CLICK HERE FOR BLOGGER TEMPLATES AND MYSPACE LAYOUTS

Kamis, 25 Desember 2008

WEB SERVER DELPHI

Web Service dengan Delphi

Dukungan Delphi pada web service dimulai pada versi 6 dan dilanjutkan terus sampai sekarang. Delphi membungkus irnplementasi SOAP dengan sangat rapi.


Jika Anda menganggap berusaha memahami kode-kode pada SOAP (pada artikel sebelumnya) sebagai suatu mimpi buruk, maka anda masih cukup normal. Untungnya menggunakan Delphi, kita tidak perlu berurusan dengan proses parsing SOAP message. Delphi menghandlenya untuk kita, sehingga kita bisa fokus ke bagaimana mewujudkan web service daripada pusing-pusing menerjemahkan SOAP message.


Membuat Server Web Service

Agar mudah dan fokus ke bagaimana membuat server web service menggunakan Delphi, kita akan membuat web service sederhana untuk mengenkhpsi teks dengan algoritma MD5, kita akan menggunakan unit uMDS.




Aplikasi web service ini akan menerima request berisi teks yang akan dienkripsi, melakukan enkripsi, dan mengembalikan teks hasil enkripsi ke aplikasi klien. Anda diharapkan telah memiliki pengetahuan paling tidak mengenai web server dan cara kerjanya. Membuat SOAP Server Application buka Delphi. Klik File->New->Other. Pilih tab Web Services dan pilih SOAP Server Application. Klik OK, selanjutnya akan dltampilkan dialog New SOAP Server Application seperti gambar 2.




Seperti yang terlihat di bawah, ada beberapa pilihan web server yang bisa dipakai, yakni: • Pilih ISAPI/NSAPI Dyanamic Link Library bia Anda menggunakan IIS atau Netscape Web Server, • CGI Stand-alone executable. Pilih opsi ini bila aplikasi Anda akan dijalankan sebagai aplikasi CGI (Common Gateway Interface). • Apache 1.xShared module (DLL). Pilih opsi ini bila Anda menggunakan Apache 1 .x • Apache 2.xShared module (DLL). Pilih opsi ini bila Anda menggunakan Apache 2.0 ke atas. • Web App Debugger executable. Pilih opsi ini bila ingin menggunakan web server milik Delphi.

Untuk development, disarankan menggunakan pilihan ini, karena sangat memudahkan pada saat kita melakukan debugging aplikasi. Jika sudah stabil, aplikasi dapat kita ubah menggunakan tipe server lain dengan mudah. Untuk artikel ini, saya gunakan pilihan ini dan mengisi Class Name de¬ngan TMD5Server. Klik OK. Selanjutnya Delphi akan membuat aplikasi dan akan menampilkan dialog konfirmasi apakah kita ingin membuat SOAP Server Interface. Jika Anda pilih untuk tidak menciptakan SOAP Server Interface sekarang, Anda dapat membuat SOAP Server Interface nanti dengan cara klik File->New->Other->WebServices-> SOAP Server Interface.



Jika Anda mernbuat SOAP Server Interface, akan ditampilkan dialog seperti pada gambar 3, yakni:
• Service name adalah nama web service. Namanya hams memenuhi standar penarnaan variable pada Delphi.
Unit identifier adalah nama file unit yang akan dihasilkan.
Generate comments, jika dipilih, menyebabkan Delphi akan menambahkan komentar mengenai interface ke dalam source code interface.
• Generate sample methods, jika dipilih, menyebabkan Delphi akan menambah¬kan contoh bagaimana memanggil metode interface.
• Service activation model berisi tipe ak-tivasi. Per Request, instance implemetasi class server akan dibuat tiap kali ada request dan akan dibebaskan setelah request selesai ditangani. Global, instance implementasi class hanya ada satu dan akan menghandle semua request. Isikan service name dan unit identifier sebagai MDSSvc dan biarkan lainnya apa adanya. Klik OK. Delphi akan menghasilkan empat unit, yakni unit form utama, unit web module, unit bernama MD5Svdmpl.pas, dan MD5Svdntf.pas.Unit MDSSvclmpI.

Ketika berisi implementasi interface yang dideklarasikan di MD5Svclntf.pas. Berikut ini kode kedua unit tersebut:


MD5Svdmpl.pas
{ Invokable implementation File for TMD5Svc which implements IHD5Svc }

unit MD5SvcImpl;
interface uses InvokeRegistry, Types, XSBuiltlns, MD5SvcIntf;
type { TMD5Svc }
TMD5SVC = class(TInvokableClass, IHD5Svc)

public
implementation Initialization { Invokable classes must be registered } InvReg1stry.
Reglsterlnvokabl eClass(TM05Svc);

end.

MD5Svclntf.pas
{ Invokable interface IMD&Svc }
unit M05SvcIntf;
interface uses InvokeRegistry, Types, XSBuiltlns;
type { Invokable interfaces must derive from Ilnvokable }
IMD5Svc = interfaced Invokable)

[‘{DM7E88A-A66D-48A6-911F- 51D515375506}']
{ Methods of Invokable interface must not use the default }

{ calling convention ; stdcall is recommended }
end;


implementation initialization
{ Invokable interfaces must be registered }
InvRegistry.Register!nterfac e(TypeInfo(IMD5Svc));

end.

Tambahkan metodebernama Encrypt, se-hingga deklarasi interface IMD5Svc menjadi seperti berikut ini:

{ Invokable interfaces must derive from Ilnvokable }
IMD5Svc = interface(IInvokable)

['{DD0 7E88A-A66D-48A6-911F-510515375506}']
function Encrypt(const a text: string): string;
stdcal 1;

{ Methods of Invokable interface must not use the default }
{ calling convention; stdcall is recommended }
end;


Selanjutnya Anda tambahkan juga metode Encrypt ke kelas TMD5Svc dan lengkapi implementasinya sehingga menjadi seperti berikut ini:

{ THD5Svc } TMD5Svc = classWeb App Debugger.

Pastikan web server aktif dengan mengklik tombol Start. Selanjutnya buka browser dan browsing ke alamat http://localbost:8081/MD5SvcTMD5Server. Untuk mendapatkan dokumen WSDL, klik IMD5SVC [WSDL].

Ok, aplikasi server sudah siap, mari kita buat aplikasi klien untuk menggunakan server MDSSvc.

Membuat Aplikasi Klien

Buat aplikasi baru, drag dan drop kontrol Edit, Label, dan Button. Beri nama edText, edMD5 dan btnEncrypt, susun sehingga menjadi seperti gambar 5.

Selanjutnya kita import dokumen WSOL. Jalankan MDSSvcexe dan Web App Debug¬ger. Klik File->New->Other->WebServices->WSDL importer (lihat gambar 1.1).

isi lokasi WSDL dengan httpj/localhost:808ifMD5Svc.TMDSServer/wsdlf IMDSSvc. Klik Wert. Jika sukses, Anda akan mendapatkan dialog seperti di bawah. Klik Finish.

Setelah itu, Delphi akan menghasilkan file unit bernama IMD5Svc1.pas. Simpan unit ini misal dengan nama u_w5dl_IMD5Svc.pas. Tambahkan unit u_wsdl_IMD5Svc. pas kedalam klausa uses pada form utarna. Tambahkan event OnClick pada btnEncrypt dan lengkapi sehingga menjadi sebagai berikut ini:

Implementation





uses u_wsdl_lMD5Svc;


procedure TfrmMain.
btnEncryptClicklSender: TObject);
begin
edMD5.Text:=GetIMD5Svc.
Encrypt(edText.Text);
end;
end.

Ok, jalankan. Pastikan MD5Svc.exe jalan demikian pula server Web App Debugger jalan. Jlka sukses tiap kali Anda mengklik lombol Encrypt, isi text akan dikonversi ke MDS.

Mengonversi Web Service

Web service yang sudah klta buat di atas tianya cocok untuk development environment Untuk dapatdigunakan pada produc¬tion environment, kita perlu konversi ke tlpe web server lain.
CGI

Buat aplikasi SOAP Server Application baru dan pilih type web server-nya sebagai CGI stand alone executables. Klik OK, Delphi akan menanyakan apakah Anda hendak membuat defjnisi interface baru, klik No, karena kita tidak akan membuat interface baru. Simpan proyek misal sebagai MDSSveCGLdpr.

Dari Project Manager tambahkan file MDSSvclntf.pas, MDSSvclmpl.pas, dan uMDS.pas ke dalam project yang baru. Lakukan kompilasi. Setelah kompilasi selesai, copy file MD5SvcCGI.exe ke direktori script milik web server. Contoh pada setver Apache direktori script defaultnya ada pada direktori cgi-bin di mana Apache diinstal. Milik saya ada di C:\apache\cgi-bin\. Untuk IIS biasanya di direktori Scripts. Pada komputer saya ada di c:\lnetpub\ScriptS.

Untuk mengakses halaman Service Info, pastikan web server sudah aktif. Buka web browser dan browse ke http://localhost/cgi-6in/MD5SwX"G/.exe. Anda akan mendapatkan halaman web yang mirip gambar 4. Dokumen WSDL bisa diakses dari URL http://localhost/cgi-6in/MD5SwX"G/.exeAwdWMD5Svc.

Langkah terakhir adalah memodifikasi aplikasi klien agar menggunakan WSDL server web service yang baru Buka aplikasi klien MDSCIient.dpr. import WSDL dari URL di atas, setelah sukses ubah namanya meniadi IMD5SvcCGI.pas. Pada unit form utama, ubah unit u_wsdl_MD5Svcpas menjadi IMD5SvcCGI.pas. Lakukan kompilasi dan jalankan. Output aplikasi akan sama seperti versi sebelumnya.

IIS


Buat aplikasi SOAP Server Application baru dan pilih type web servernya sebagai ISAP/NSAPI Dynamic Link Library. Klik OK, Delphi akan menanyakan apakah Anda hendak membuat definisi interface baru. klik No. karena kita tidak akan membuat interface baru. Simpan proyek misal sebagai MDSSvcllS.dpr.

Seperti pada CGI. tambahkan unit MDSSvclntf.pas, MDSSvclmpl.pas, dan uMDS.pas ke project MDSSvcllS.dpr. Laku-kan kompilasi. Copy MD5SvcllS.dll ke direktori script IIS, biasanya di direktori c:\lnetpub\Scripts. Untuk mengakses halaman Service Info, buka web browser dan browse ke http://localhost/Scripts/MDSSvdlS.dii Dokumen WSDL bisa diakes dari URL http://localhost/ Scripts/MDSSvdtS. dll/wsdl/IMDSSvi.


Apache 1.x

Buat aplikasi SOAP Server Application baru dan pilih type web servernya seba¬gai Apache 1.x Shared Module Klik OK, Delphi akan menanyakan apakah Anda hendak membuat definisi interface baru, klik No, karena kita tidak akan membuat interface baru. Simpan proyek misal sebagai MD5SvcApache.dpr.

Tambahkan unit MDSSvclntf.pas, MD5Svclmpl.pas dan uM05.pas ke project MD5SvcllS.dpr. Lakukan kompilasi. Copy MD5SvcApache.dll ke direktori module Apache, milik saya ada di c:\apache\modules. Buka file konfigurasi httpd.conf milik apache dan tambahkan baris LoadModule MD5SvcApache.dll.

Apache 2.x

Apache 2.x caranya hampir sama dengan Apache 1.x, hanya saja Anda memilih Apache 2.x Shared module. Oleh karena pada Apache 2.0.39 terdapat lubang keamanan, maka mulai Apache 2.0.40, tim developer Apache mengubah





interfacenya, sehingga Delphi 7 hanya mendukung versi hingga Apache 2.0.39. Agar Delphi 7 mendukung versi 2.0.40 ke atas, Anda perlu mengubah isi file HTTPD2.pas. Cari deklarasi konstanta MODULE_MAGIC_NUMBER_MAJOR dan MODUlE_MAGIC_NUMBER_MINOR.
Untuk Apache versi 2.0.40 ubah menjadi:
MODULE_MAGIC_NUMBER_MAJOR = 20020628; { Apache 2.0.40 )
MODULE_MAGIC_NUMBER_MINOR = 0;
Untuk Apache versi 2.0.41 sampai 2.0.45 ubah menjadi:
MODULE_MAGIC_NUMBER_MAJOR = 20020903; { Apache 2.0.41..45 }
M0DULE_MAG1C_NUMBER_MIN0R = 0;
Untuk versi 2.046:
MODULE_HAGIC_NUMBER_MAJOR = 20020903; { Apache 2.0.46 }
MODULE_MAGIC_NUrlBER_MINOR = 2;
Untuk versi 2.0.47 dan 2.0.48:
MODULE_MAGIC_NUMBER_MAJOR = 20020903; { Apache 2.0.47..48 }
M0DULE_HAG1C_NUMBER_MIN0R = 4;
Untuk versi 2.0.49:
MODULE_HAGIC_NUMBER_MAJOR = 20020903; { Apache 2.0.49 }
MODULE_MAGIC_NUrlBER_MINOR = 7;
Untuk versi 2.0.50:
MODULE_MAGIC_NUMBER_MAJOR = 20020903; { Apache 2.0.50 )
MODULE_MAG1C_NUMBER_MINOR = 8;
Untuk versi 2.0.51 sampai 2.0.53: MQDULE_MAGIC_NUMBER_MAJOR = 20020903;
{ Apache 2.0.51..53 }

Untuk versi 2.0.54 dan 2.0.55:
M0DULE_MAGIC_NUHBER_HAJOR = 20020903; { Apache 2.0.55 }
MQDULE_MAGIC_NUMBER_MINOR = 11;

Tambahkan baris kode berikut sebelum deklarasi tipe conn_rec. ap_conn_keepalive_e = (AP_ CONNJJNKNOHN,
AP_ C0NN_CL0SE,
AP_ CONNJCEEPALIVE);

Pada deklarasi tipe conn_rec, ubah (** Are we still talking? *)
flags: Cardinal;
{ The following are in the flags bitset:
unsigned aborted:!.;
(** Are we going to keep the connection alive for another request?
* -1 fatal error, 0 undecided, 1 yes *)
signed int keepalive:2;
(** have we done double-reverse DNS? -1 yes/failure, 0 not yet,
* 1 yes/success *)
signed int double_reserve:2;
}
(** Are we still talking? *)
Flags1: Cardinal;
{ The following are In the flags bitset:
unsigned aborted:!; }
{** Are we going to keep the connection alive for another request?
* ©see ap_conn_keepalive_ e *)
keepalive: ap_conn_ keepalive_e;
flags2: Cardinal;
{ The following are in the flags bitset:
(** have we done double-reverse DNS? -1 yes/failure, 0 not yet,
* 1 yes/success *> signed int double.
reverse:2; }

Lakukan Build agar HTTPD2.pas ikut dikompilasi ulang. Langkah ini hanya berlaku bila Anda menggunakan Delphi 6 atau 7.

Lebih lanjut
http://www.dibrob42.com/delphi7/ apache2040.html.

2 komentar:

Anonim mengatakan...

Aq nga ngerti....?

Anonim mengatakan...

liss....sumpahh neeeh artikel kreeenn banget!!!

Kalo bisa jangan cuma buat artikel, tapi lu implemntasiin OK!?Keren...keren...

Gw baru tau step by step'a...Tapi membantu banget buuu....