Web Service Delphi + PHP

Kepada rekan-rekan semua, aku beginer neh. Mohon pencerahan web-service di delphi,smsal Cara posting var dari delphi ke file php yang ada

Tutorial atau demo program pasti bejibun kalo mau mencari di Google, tapi barangkali yang client-nya Delphi tidak banyak. Saya kasih kata kuncinya buat mulai, lihat di PHP Manual bagian Soap Functions. Di situ ada contoh-contoh penggunaan functionnya. Kalo di Delphi, sebagai SOAP client bisa menggunakan THTTPPRIO (di bagian WebServices). Baca-baca juga manualnya. Tentu selain SOAP juga ada cara-cara yang lain, silakan didalami sendiri.

Yang cukup penting di SOAP ini adalah WSDL (Web Services Definition Language). WSDL digunakan baik oleh Delphi dan PHP sebagai panduan dalam pemanggilan fungsi maupun tipe data. Di Delphi bisa membuat dan import WSDL, lihat di File :: Other :: WebServices. Kalo PHP bisa pula tanpa WSDL (null), tapi untuk tipe data tertentu (spt BLOB), akan bermasalah. Bisa juga sih digenerate, tapi lebih terbaca dgn WSDL statis. Contoh-contoh WSDL dan formatnya bisa dicari di Google.

Sekedar contoh sederhana, bisa dilihat di bawah. PHP-nya dgn non-WSDL. di Delphi, THTTPPRIO.URL diset ke http://localhost/soap_srv.php (host dan path disesuaikan). Soap Functions bila belum aktif di PHP, aktifkan di php.ini, di Windows: extension=php_soap.dll.

a) soap_srv.php

<?php

function echoString($str)
{
  return 'Hasil: '. $str;
}

$server = new SoapServer(null, array('uri' => "http://localhost/"));
$server->addFunction("echoString");
$server->handle();

?>

b) Hello.pas

unit Hello;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type
  MyPortType = interface(IInvokable)
  ['{11111111-191C-BD25-4668-FDD076DA1975}']
    function EchoString(const S: string): string; stdcall;
  end;

implementation

initialization
  InvRegistry.RegisterInterface(TypeInfo(MyPortType), '', '');

end.

c) Unit1.pas

...

uses Hello;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  Sp: MyPortType;
begin
  Sp := HTTPRIO1 as MyPortType;
  Memo1.Lines.Add(Sp.EchoString('Jojon'));
end;

5 Komentar »

  1. aries said

    mas saya coba ada error “Received content of invalid content-type setting:txt/html-soap expects “text/htlm”, kira2 apanya ya mas..

    tks
    aries

    • Oguds said

      Coba dicek lewat proxy, apa yg bermasalah (property
      THTTPRIO.HTTPWebNode.Proxy). Program untuk proxy misalnya ProxyTrace.

      Saya coba programnya, ada error “Fatal error: Class ‘mysqli’ not
      found”. Error ini relatif, tapi artinya, ketika terjadi error maka
      header SOAP bukan XML melainkan HTML. Ada baiknya dicoba dulu full PHP
      untuk client + server, setelah ok, clientnya dipindah ke Delphi.

      • jupri said

        Mas kl sy privat khusus delphi webservice bisa gak? sy bener2 kesulitan tentang web sevice dan sangat urgent. kl bisa tolong reply ke sikeuda05@gmail.com. nanti kita bahas lebih detil. trims atas perhatiannya. Jupri

      • saya dah berhasil utk insert update dst, cuma skarang saya beralih ke http post…

  2. Salam kenal Mas, mau menanyakan tentang HTTPRIO.
    Aplikasi WSDL saya sudah berjalan lancar, tapi ketika aplikasi di tutup selalu muncul error :
    “Exception in Module Project1.exe at 001B13F8. Invalid Pointer”
    Mohon pencerahannya, terimakasih

RSS feed for comments on this post · TrackBack URI

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s