kbmMW ServeRequest Arguments Problem
Ceritanya, ketika gw sedang bereksperimen dengan RequestArguments nya kbmMW, ada iterasi argument yang bikin error aplikasi, bahkan gw kira ini error akibat tidak cocoknya kbmMW, ADO dan ODBC mySQL karena:
- gw pake mySQL 5.11-beta
- gonta ganti komponen database, dari ADO, Zeos, MyDAC
- gonta-ganti myODBC dari versi 3.51.06 ke 3.51.12 ke 5-Alpha ke 3.51.12 ke 3.51.06 dan akhirnya baru bisa jalan stabil di 3.51.12 (setelah beberapa kali install/uninstall)
Di log ApplicationServer kayak begini:
Nah di Client / RemoteApp kayak begini:
Lama banget gw debugging, karena terlalu fokus di rutin database dan koneksinya.. sampai akhirnya iseng2 fokus ke method OnServeRequest, dan menemukan bug-nya. Bug ini mungkin diakibatkan kesalahan konversi tipe data di dalam argument sehingga tidak dapat ditampilkan dengan benar:
Untuk lebih jelasnya di kode ini:
for Index := Low(Args) to High(Args) do Memo.Lines.Add(' --> Argument[' + IntToStr(Index) + '] : ' + Args[Index]);
Dan akhirnya ApplicationServer dapat menyajikan informasi sesuai request dari client, walaupun log yang tercatat kurang terperinci:
Dan ini grid berisi data pada client:
Tapi saya sendiri masih penasaran tuh, gimana ya biar OnServeRequest dapat nampilin semua argument dengan benar.
Mas kok blom ada skrinsyutnya … 😀
BTW …. udah pernah pake Indy ga …. ? gimananya kinerjanya dibanding dengan yang laen …. ?
Wah … kok sekarang muncul yach ….. 😀
mungkin loading page nya belum 100% atau proses render image nya belom selesai, jadi belom nongol deh.. 🙂
Weew …. knapa kok error gitu yach …. 😀 tapi diriku coba yang free, aman tuch … 😛 apa Argumennya dikit kalee …
Ato coba pake Fungsi (klo ga salah) VarLowBound() dan VarHighBound(). Hasilnya sama ga yach …. ?
Ternyata kbmMW juga pake Indy yach … 😀
yang free kalo gak salah gak support koneksi ke DB, sementara yg saya pake versi yg Enterprise….Untuk request yg tidak berkaitan degan database, aman2 aja, nah rutin tersebut langsung error begitu saya request fungsi yang berkaitan dengan retrieval record..
kbmMW bisapake Indy, DXSocks dan protokol bikinan kita. 😀
args di kbmMW bertipe variant, jadinya tinggal lihat apa dia null atau memiliki data, kalau ada datanya kemudian tinggal lihat aja tipe datanya apa, toh kan variant menyimpan informasi tersebut.
kemudian sedikit saran, karena ini sifatnya dijalankan sebagai middletier, lebih baik ganti DAC-nya pake DBExpress, atau komponen DAC yang mensupport unidirectional. Hal ini karena adapter dataset kbmMW sendiri merupakan turunan dari memtable, dengan demikian tidak terjadi double buffering yang mengakibatkan borosnya memory yang dikonsumsi. hati-hati dengan memory manager yang dipake, paling tidak gunakan fastMM dan tune-up konfigurasinya untuk kebutuhan multithread server.
terakhir gunakan Log4Delphi untuk logging, melakukan logging make Memo itu menyedihkan karena sifatnya yang menggunakan memory sebagai buffer, sayang memory server yang berharga kalau dipake jadi buffer log.
Walaupun sekarang saya tidak menggunakan kbmMW (karena ternyata bos lebih memilih ASTA dengan melalui berbagai pertimbangan, yah jadilah selama setahun ini saya bergelut dengan ASTA), namun saya setuju dengan saran Anda, dan saya sudah menggunakan beberapa diantaranya.
Thnx.