Home > .NET Remoting, Visual C# > Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 1

Pembuatan Aplikasi Client Server dengan Arsitektur 3-tier Part 1

February 1, 2012

Masih melanjutkan postingan sebelumnya yaitu tentang .NET Remoting, tetapi kali ini kita akan mengimplementasikan .NET Remoting pada pembuatan aplikasi database, tapi sebelumnya kita lihat dulu kenapa kok report2x menggunakan .NET Remoting untuk pembuatan aplikasi database karena katanya “orang yang tidak tau itu cendrung memusuhi” halah :D.

Arsitektur Client Server 2-tier

Sadar atau enggak aplikasi yang kita buat selama ini mungkin lebih banyak (semua malahan :D) masuk kategori ini. Kok tau ?

Dari gambar diatas terlihat semua aplikasi klien terkoneksi ke server database dan mengeksekusi method CRUD (Create, Read, Update dan Delete), semakin banyak aplikasi kliennya tentu akan berpengaruh pada kinerja database, apalagi klo rule bisnisnya langsung diletakkan di klien jika ada perubahan otomatis harus mengupdate semua klien 😦

Arsitektur Client Server 3-tier

Untuk yg 3 tier sebanyak apapun aplikasi kliennya tidak terlalu bermasalah karena yang terkoneksi ke database hanya satu yaitu aplikasi server, paling-paling spek mesin servernya aja yg dinaikin 😀

Klo pengen lebih ngirit untuk aplikasi server bisa satu mesin dengan database, selain itu rule bisnis biasanya diletakkan disini, sehingga jika terjadi perubahan cukup mengupdate disatu tempat.

Nah berdasarkan 2 pertimbangan diatas, mungkin sudah muncul motivasi untuk mencoba .NET Remoting dalam pengembangan aplikasi database… klo iya silahkan lanjutkan membacanya 🙂

Untuk kasus project yg akan kita buat sederhana saja yaitu aplikasi SmartLibrary (SI Perpus) tentunya tidak semua 😀 kita ambil contoh pengolahan data buku dan penerbit, selain itu untuk alasan kemudahan databasenya cukup menggunakan Ms Access.

Oke sebelumnya kita lihat dulu project SmartLibrary yang akan kita bangun.

1. SmartLibraryLib

SmartLibraryLib dibuat dengan memanfaatkan project bertipe Class Library yang isinya hanya berupa interface IDao dan class Model.

Project ini nantinya akan dicompile menjadi file dengan ekstensi .dll (SmartLibraryLib.dll), file SmartLibraryLib.dll ini akan dishare atau ditambahkan sebagai referensi untuk aplikasi SmartLibraryServer dan SmartLibraryKlien.

Teknik ini dikenal dengan istilah “Shared Assembly” tujuannya adalah agar aplikasi server dan klien bisa berkomunikasi dengan cara yang sama.

2. SmartLibraryServer

SmartLibraryServer dibuat dengan memanfaatkan project bertipe Console Application, implementasi aslinya biasanya aplikasi server dijadikan sebuah service (Windows Service).

Aplikasi ini nantinya akan mengimplementasikan semua method-method abstract dari project SmartLibraryLib.

3. SmartLibraryKlien

Terakhir SmartLibraryKlien dibuat dengan memanfaatkan project bertipe Windows Application isinya berupa Form dan Report, aplikasi ini hanya memanggil method-method abstract dari project SmartLibraryLib dengan memanfaatkan objek proxy sehingga method tersebut akan dieksekusi secara remote (dijalankan di sisi server).

Berikut gambaran project yang akan kita bangun.

Project diatas sangat mirip dengan project Calculator yang sudah saya bahas pada postingan sebelumnya.

Sesuai urutan kita akan membuat project SmartLibraryLib terlebih dulu dan sebagai gambaran apa saja yang ada didalam project SmartLibraryLib ini bisa kita lihat dari class diagram berikut :

Dari class diagram diatas terlihat bahwa SmartLibraryLib hanya terdiri dari Interface Dao dan Class Model (pada postingan kali ini hanya dibahas pengolahan data buku dan penerbit).

Interface IDao merupakan interface generic yang berisi method-method abstract CRUD yang akan diturunkan oleh interface IBukuDao dan IPenerbitDao.

Untuk class model merupakan representatif dari tabel-tabel yang ada di database dalam ini tabel buku dan penerbit.

Oke kita langsung saja membuat project ini.

Membuat Project SmartLibraryLib

1. Klik menu File ->New -> Project …

2. Pada dialog New Project aktifkan pilihan Visual C# kemudian pada pilihan Templates pilih Class Library

Pada isian Name isikan SmartLibraryLib, setelah itu klik tombol Ok.

Secara default pada saat pembuatan project sudah otomatis disediakan 1 buah class kosong dengan nama Class1, kita akan menambahkan class baru jadi class ini dihapus saja.

Menambahkan Folder IDao dan Model

Tujuannya untuk mengelompokkan interface dao dan class model

1. Klik kanan project SmartLibraryLib -> Add -> New Folder

Kemudian untuk nama folder diganti dengan IDao. Ulangi langkah sebelumnya untuk menambahkan folder Model.

Hasil akhir sementara

Menambahkan Class Model

Kita akan menambahkan class model Buku dan Penerbit

Semua class model akan kita tempatkan di dalam folder Model.

1. Klik kanan folder Model -> Add -> Class..

Untuk isian Name diisi Buku.

Setelah itu akan tampil editor code class Buku

Jangan lupa untuk menambahkan access modifier public.

Berikut kode lengkap untuk class Buku.

namespace SmartLibraryLib.Model
{
    [Serializable]
    public class Buku
    {
        private string _iSBN;
        public string ISBN
        {
            get { return _iSBN; }
            set { _iSBN = value; }
        }

        private string _judul;
        public string Judul
        {
            get { return _judul; }
            set { _judul = value; }
        }

        private string _edisi;
        public string Edisi
        {
            get { return _edisi; }
            set { _edisi = value; }
        }

        private string _bahasa;
        public string Bahasa
        {
            get { return _bahasa; }
            set { _bahasa = value; }
        }

        private Penerbit _penerbit;
        public Penerbit Penerbit
        {
            get { return _penerbit; }
            set { _penerbit = value; }
        }
    }
}

Satu hal yang penting disini adalah objek/instance dari class Buku akan diserialisasikan dari server ke klien atau sebaliknya sehingga harus ditambahkan atribut [Serializable].

Ulangi langkah diatas untuk menambahkan class Penerbit. Berikut kode lengkap class Penerbit

namespace SmartLibraryLib.Model
{
    [Serializable]
    public class Penerbit
    {
        private int _penerbitID;
        public int PenerbitID
        {
            get { return _penerbitID; }
            set { _penerbitID = value; }
        }

        private string _nama;
        public string Nama
        {
            get { return _nama; }
            set { _nama = value; }
        }
    }
}

hasil sementara

Menambahkan Interface IDao

Kita akan menambahkan interface IDao, IBukuDao dan IPenerbitDao

Dari diagram diatas terlihat bahwa IDao merupa interface induk dari interface IBukuDao danIPenerbitDao.

IDao sendiri merupakan interface generic yang mempunyai method abstract CRUD secara umum, sehingga interface IBukuDao danIPenerbitDao tinggal menambahkan method-method abstract yang menjadi spesialisasinya masing-masing.

Semua interface IDao akan kita tempatkan di dalam folder IDao.

1. Klik kanan folder IDao -> Add -> New Item…

2. Pada pilihan template pilih Interface kemudian untuk isian Name diisi IDao.

Setelah itu akan tampil editor code interface IDao

Jangan lupa untuk menambahkan access modifier public.

Selanjutnya kita tinggal menambahkan 5 method abstractnya yaitu Save, Update, Delete, GetAll dan GetReportAll sesuai class diagram diatas.

Berikut kode lengkapnya

Ulangi langkah sebelumnya untuk menambahkan interface IBukuDao dan IPenerbitDao.

Berikut kode lengkap interface IBukuDao dan IPenerbitDao

Pada interface IBukuDao dan IPenerbitDao diatas membutuhkan namespace SmartLibraryLib.Model karena sebagian method abstractnya mengakses class model.

Mengcompile project SmartLibraryLib

Tujuannya adalah agar project SmartLibraryLib ini bisa digunakan sebagai referensi oleh project SmartLibraryServer dan SmartLibraryKlien

1. Klik kanan project SmartLibraryLib -> Build

Setelah itu akan tampil hasil output dari proses Build

Akhirnya selesai juga dan insya Allah akan berlanjut

Selamat mencoba 🙂

  1. fajrin.zamzam
    February 3, 2012 at 7:29 am

    wah mantap…. makasih tutorialnya… monggo dilanjut om…

    • February 3, 2012 at 8:51 am

      Oke om makanya sering2x nongkrong disini 🙂

  2. eko
    February 5, 2012 at 4:02 am

    om klo menggunlan sistem diatas apakah nanti klien tidak akan banyak memakan resource di jaringan??trafic jaringan akan semakin padat karena kita kan load seluruh aplikasi??

    • February 5, 2012 at 8:49 am

      Maksudnya gimana nih om load seluruh aplikasi ??

      Intinya sama saja seperti aplikasi client server yg 2-tier, hanya saja disini tidak ada klien yg langsung mengakses database tetapi harus melalui perantara aplikasi server atw yg dikenal dg istilah middle tier.

      Malahan yg 2-tier lebih berat om, karena langsung akses database dan masing2x mengeksekusi perintah CRUD, sedangkan yg 3-tier hanya tukar2xan objek dari client ke server atw sebaliknya.

      Untuk develop sendiri memang lebih gampang yg 2-tier, yg 3-tier lumayan ribet 😀

      Sy sendiri belum berani mengimplementasikan yg 3-tier untuk aplikasi lepas/produk masal, kecuali yg benar2x bisa sy kontrol secara penuh mulai dari develop sampai implementasi.

  3. March 28, 2012 at 1:26 pm

    salam kenal om.
    om, sistem CS 3 tier pake vb 6 bisa ga?

    • March 28, 2012 at 2:02 pm

      Yg jelas bisa om, salah satunya bisa menggunakan DCOM

  4. April 16, 2012 at 11:10 pm

    om… mau tanya nich kalo menggunakan VB.Net Visual Basic apakah sama tahap2 pengerjaannya…saya lagi coba membuat Aplikasi menggunakan VB.net dengan Database SQL server..kira2.. ada contoh mudahnya ga om?

    • April 17, 2012 at 8:12 am

      Coba yang 2-tier dulu om, ini ada contoh tetapi menggunakan C# dan MySQL, toh sama saja antara C# dan VB .NET

  5. April 18, 2012 at 8:44 pm

    maksudnya gini om kasusnya… ada 2 komputer.. komputer pertama bertindak sebagai Server(disini saya install SQL servernya) sedangkan untuk aplikasinya saya install di PC ke-2.. kira kira pake Listing yang om Share di atas…bisa engga kalo menggunakan VB.NET..terus terang sudah saya coba seminggu tapi ga konek konek om.. saya engga pake class ato method..saya coba langsung pake Conection String kaya gini :

    Public Function Open() As SqlClient.SqlConnection
    Dim conect As New SqlConnection(“Data Source=127.0.0.1,1433;Network Library=DBMSSOCN;Initial Catalog=DatabaseKlinik;User ID=superuser;Password=password”)
    ‘Dim conect As New SqlConnection(“Server=ASUSA42F-PC\SQLEXPRESS;Database=DatabaseKlinik;integrated security=true”)
    conect.Open()
    Return conect
    End Function

    saya jalankan di Aplikasi di PC Pertama (sqlserver ama aplikasinya dalam 1 komputer ) itu jalan.. tapi pas saya coba di client ..itu ga bisa… muncul gini.. :

    TCP Provider: No connection could be made because the target machine actively refused it

    pusing 0mm..tapi menantang =,=”

    • April 19, 2012 at 4:48 pm

      Mungkin keblok firewall om jadi sql servernya enggak bisa diakses dari komputer lain.
      Emg pake OS apa? Trus sql server versi brp ?

  6. April 21, 2012 at 1:15 pm

    FIrewall nya udah saya matikan dua dua nya… antivirusnya juga udah saya matikan Om…. SQL SERVER nya saya udah enabled in untuk TCP/IP nya port All nya sudah saya kasih default 😀 😀 tapi tetep aja masih eror nya gt…. padahal kabel LAN nya berfungsi baik om untuk file sharing juga lancar….saya pake VB 2008 sama SQL SERVER 2005 Management Express om ….=,=”

    • April 21, 2012 at 1:15 pm

      Pake SEVEN om… 😀 😀

      • April 22, 2012 at 6:44 am

        Coba utk string koneksinya pake yg ini om :

        Data Source=ASUSA42F-PC\SQLEXPRESS;Initial Catalog=DatabaseKlinik;User Id=sa;Password=password sa
        
  7. April 23, 2012 at 9:56 pm

    om..aplikasi 3-tier ini bisa diterapakn di bahasas pemrograman java? arstektur 3-tier ini sama dengan konsep MVC(Model,View, Controller). mohon pencerahannya.

    • April 24, 2012 at 5:29 am

      Iya sih om, memang ada kemiripan hanya saja contoh diatas tidak menggunakan controller 😀

      Inti postingan sy ini adalah utk menunjukkan bagaimana cara mengakses objek yg ada diluar domain aplikasinya menggunakan teknologi .NET Remoting, nah fokusnya sebenarnya adalah di .NET Remoting ini klo di java mirip seperti Java RMI

      • April 24, 2012 at 6:03 am

        oke..terima kasih banyak om

        • April 24, 2012 at 8:57 am

          Sama2x om 🙂

  8. April 24, 2012 at 7:43 am

    Admin :
    Coba utk string koneksinya pake yg ini om :
    view sourcehttp://s2.wp.com/wp-content/plugins/syntaxhighlighter/syntaxhighlighter/scripts/clipboard.swf?m=1317693961gprint?1Data Source=ASUSA42F-PC\SQLEXPRESS;Initial Catalog=DatabaseKlinik;User Id=sa;Password=password sa

    berarti itu ga pake IP address om? kan pengennya lewat jaringan.. trus untuk user SA nya apa buat user baru di sql server nya ato gimana om?

    • April 24, 2012 at 8:43 am

      Klo kita ngeping nama komputer atw ip address hasilnya kan sama aja om, klo mau diganti ip komputer jg enggak masalah.

      Data Source=192.168.1.1\SQLEXPRESS;Initial Catalog=DatabaseKlinik;User Id=sa;Password=password sa
      

      Misal IP Server : 192.168.1.1

      trus untuk user SA nya apa buat user baru di sql server nya ato gimana om

      Gubrakkkkk…, nah ini nih yg kebangetan banget udah make sql server tapi enggak tau apa itu user “sa”

      Sama seperti orang udah make MySQL tetapi enggak tau apa itu user “root” atau yang udah make Firebird tetapi enggak tau apa user “SYSDBA”.

      • April 24, 2012 at 11:27 am

        hahaha…..saya coba dulu om…seengga nya saya ga tau saya nanya om daripada pura pura ga tau 😀

        • April 24, 2012 at 11:33 am

          Oke om sipp, berarti skrg udah tau ya ? 😀

          • April 24, 2012 at 12:16 pm

            udah bisa om kalo satu PC..tapi yang beda PC blum….hehehe lanjut malam ah gawe dulu….makasi banyak om 😀

            • April 24, 2012 at 12:55 pm

              Coba dibagian Security -> Server authentication aktifkan pilihan “SQL Server and Windows Authentication mode”

  9. April 25, 2012 at 6:28 am

    udah dicoba om pake user sa trus security nya juga dari awal udah pake 2 autentikasi pake windows and server tapi tetep om gabisa connect .. masih :

    TCP Provider: No connection could be made because the target machine actively refused it

    huaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah pusing 😀

    • April 25, 2012 at 6:30 am

      and btw saya IP nya pake 127.0.0.1 1433 soalnya pake IP lain gabisa… boro boro 2 komputer… di Laptop sendiri kalo IP nya bukan 127.0.0.1 1433 gabisa connect om..

      • April 25, 2012 at 9:54 am

        Gini aja om, coba koneksi dari komputer lain dulu via query Query Analyzer (sql server 2000) atau SQL Server Management Studio Express (sql server 2005 keatas) klo enggak bisa juga ya jangan harap bisa koneksi dari aplikasi yg om buat.

        Jadi intinya benahin dulu setting sql servernya, atau coba baca artikel Enable remote connection to SQL Server 2005 Express

        • April 25, 2012 at 11:05 am

          udah bisa om… masalah nya ternyata Antivirus nge Blok Jaringannya..setelah saya off kan AV nya… alhamdulillah bisa terkoneksi 😀 makasi banyak om hehehehe

          • April 25, 2012 at 11:21 am

            Gubrakkk 😀

  10. May 2, 2012 at 2:34 pm

    om, apakah setiap pembuatan class harus di BUILD terlebih dahulu sebelum melanjutkan ke interface?

    • May 3, 2012 at 4:39 pm

      Sebaiknya sih

  11. feby
    June 30, 2012 at 4:20 pm

    om , cara server menangani input dari banyak client agar tidak terjadi kres gimana. ?

    • June 30, 2012 at 9:01 pm

      Contoh crashnya g mana om ?

      • feby
        July 14, 2012 at 10:42 pm

        ketika mengakses database, misal insert, update, delete oleh banyak client dlm waktu bersamaan.

        • July 15, 2012 at 1:44 pm

          Emg ada berapa klien ? Coba terapkan buka-tutup koneksi setiap menjalankan perintah insert, update, delete dan select.

  12. cikampret
    August 11, 2012 at 2:52 pm

    maaf suhu, saya udah coba buat library ini satu persatu mulai dari awal, tetapi setelah saya compile keluar error spt ini:

    Error 1 The type or namespace name ‘Dataset’ could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\ce\Local Settings\Application Data\Temporary Projects\SmartLibararyLib\IDao\IPenerbit.cs 13 9 SmartLibararyLib
    Error 2 The type or namespace name ‘Dataset’ could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\ce\Local Settings\Application Data\Temporary Projects\SmartLibararyLib\IDao\IBukuDao.cs 14 9 SmartLibararyLib
    Error 3 The type or namespace name ‘Dataset’ could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\ce\Local Settings\Application Data\Temporary Projects\SmartLibararyLib\IDao\IDao.cs 15 9 SmartLibararyLib

    itu disebabkan karena apa ya? terus solusinya gimana suhu? maklum banyak nanya masih nubie

    • August 12, 2012 at 8:03 am

      Class DataSet ada di dalam namespace System.Data, jadi harus ditambahkan dulu namespacenya.

      using System.Data;
      
  13. miftah
    September 18, 2012 at 7:29 am

    Wah blog nya pak kamarudin to,. salam jumpa pak.

    pak nanya2 nic, kebetulan kan saya punya aplikasi jadi cuma devlop nya make vb.6 dan databasenya masih make acces, kira2 bisa gak c pak lo kita bikin model tree tier, terimakasih sebelumnya.

  14. October 16, 2012 at 1:08 am

    Ass, om masih lum ngerti nih.

    kalau di 2 tier kan, dari client nembak langsung ke komputer database (server) melalaui aplikasinya + memebuat settingan melalui MySQL ODBC Connector, kalau dari server cukup install MySQL + Database-nya.
    kalau untuk 3 tier gimana yah…, dari komputer client file/aplikasi apa saja yang diperlukan untuk mengakses Remote Object yang ada di server, begitu juga dari sisi aplication server. Mohon pencerahanya om, Maksih
    Ass…

  15. ahmad7802
    January 11, 2013 at 5:48 pm

    Om ada contoh sourcecode tuk hak akses dan login form ??

    • January 11, 2013 at 7:59 pm

      Coba kesini om

  16. ahmad7802
    January 11, 2013 at 8:24 pm

    klo sourcecode level akses yg 3 tier ada ga om ?

  17. January 12, 2013 at 2:27 am

    Engga punya om, bikin sendiri aja 😀

  18. martin
    February 23, 2013 at 11:42 am

    om. yang bagian ini

    Private _penerbit As Penerbit
    Public Property Penerbit() As Penerbit
    Get
    Return _penerbit
    End Get
    Set(ByVal value As Penerbit)
    _penerbit = value
    End Set
    End Property

    Type penerbit – nya dari mana yak?
    trima kasih

    • February 23, 2013 at 12:03 pm

      Ya dari class Penerbit, coba cek lagi di atas

      • martin
        February 24, 2013 at 6:45 pm

        oh iya ding ada

        • February 25, 2013 at 8:38 am

          Sipp :), tapi kok kodenya pake VB .NET ?

          • martin
            February 25, 2013 at 9:01 am

            hahaha….saya bisanya cuma vb.net om. jadi ya ngetesnya pake vb.net

            • February 25, 2013 at 9:28 am

              Oke om, apapun bahasanya yg penting paham konsepnya 🙂

  19. July 2, 2013 at 5:53 pm

    ada gak link download untuk file contoh diatas

    • July 5, 2013 at 9:23 am

      Linknya ada disini.

  20. noe
    July 16, 2013 at 4:01 pm

    om mau tanya.
    misal saya ada server yg akses ke dua database di lokasi yg berbeda.
    apa port-nya harus berbeda.
    misal u db1 ->tcp://localhost:8084/serviceA
    u db2 ->tcp://localhost:8085/serviceB

    terima kasih

    • July 17, 2013 at 1:45 pm

      enggak perlu om, kan nama servicenya udah beda serviceA dan serviceB

  1. April 16, 2014 at 9:14 am
Comments are closed.