Arsip Blog

Melihat dan Modifikasi XML SOAP WCF Web Service

Di projek terakhir, saya mendapat tugas membuat program untuk melakukan signing terhadap request ke web service. Selain itu ada permintaan agar XML SOAP request yang telah di signing dan XML SOAP response dari web service disimpan ke dalam database untuk keperluan audit. Ketika melakukan invoke ke web service, tidak ada property yang menjelaskan struktur/bentuk dari XML SOAP nya. Lalu bagaimana cara mendapatkan XML SOAP yang dikirim maupun yang diterima dari web service?
Read the rest of this entry

Mendapatkan Enumerasi Member Dari Description Attribute

Sebelumnya saya pernah menulis tentang mendapatkan string deskripsi dari enumerasi (baca disini).
Kali ini saya menulis bagaimana melakukan kebalikannya, Mendapatkan enumerasi member berdasarkan string deskripsi.

Misal kita punya enumerasi semacam ini

public Enum JenisHewan
{
   [Description("Cow")]
   Sapi,

   [Description("Cat")]
   Kucing,

   [Description("Dog")]
   Anjing
}

Dari enum tersebut, misal kita mendapat input “cow”, “Cat” atau “Dog”, nah bagaimana kita mendapatkan value Sapi, Kucing atau anjing dari input tersebut?

static JenisHewan MapperStringToEnumHelper(string str)
{
    var tipe = typeof(JenisHewan);
    int returnValue = 0;

    foreach (FieldInfo fi in tipe.GetFields())
    {
        DescriptionAttribute attibute = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));

        if (attibute != null)
        {
            if (attibute.Description == str)
            {
                returnValue = (int)fi.GetValue(null);
                break;
            }
        }
    }

    return (JenisHewan)returnValue;
}

Sekarang bagaimana mendapat enumerasi dari string, misal mendapatkan enum ‘Sapi’ dari string “Sapi” atau mendapatkan enum ‘Kucing’ dari string “Kucing”?

static JenisHewan MapperStringToEnumHelper(string str)
{
     var tipe = typeof(JenisHewan);
     int returnValue = 0;
     System.Reflection.FieldInfo fi = tipe.GetField(str);
     returnValue = (int)fi.GetValue(null);

     return (JenisHewan)returnValue;
}

Semoga tips singkat bisa berguna.
Happy coding

Optimalisasi Performance ASP.net

MENYIMPAN INFORMASI VIEWSTATE DI SERVER

Dalam aplikasi web terdapat banyak faktor yang mempengaruhi performance. Salah satu yang menjadi ‘kekurangan’ ASP.net adalah Viewstate. Viewstate ini berisi informasi-informasi dari semua control yang ada di page. Informasi control ini sebenarnya diproses di server dan kemudian di simpan di viewstate dan ditempelkan ke page dan dikirim ke client. Dan tentu saja, semakin besar informasi viewstate ini, semakin besar pula ukuran file yang di transfer ke client. Untuk melihat informasi viewstate, buka halaman .aspx dan lihat kode sumbernya (view source)

Setiap control di halaman selalu memiliki viewstate padahal tidak semua digunakan. Jika ketika proses postback kita tidak memerlukan informasi dari suatu control maka kita tidak perlu menyimpan viewstate. Kita bisa mematikan viewstate suatu control dengan set ‘EnableViewState=false’ di property control. Tentunya kita harus jeli, menentukan control mana yang memerlukan viewstate dan mana yang tidak.

Selain setting diatas, kita juga bisa memindahkan informasi viewstate ini ke server, jadi tidak akan diikutsertakan dalam page yang dikirim ke client. Untuk menyimpan informasi viewstate di server, kita perlu meng override method ‘SavePageStateToPersistenceMedium’ dan method ‘LoadPageStateFromPersistenceMedium’

Read the rest of this entry

Menghitung Interval Waktu di C#

Di bahasa VB.net, DateDiff digunakan untuk menghitung interval hari, jam, menit dan detik antara dua waktu. Namun fungsi ini tidak tersedia di C#. Ketika sedang ‘otak-atik’ C#, saya menemui kesulitan ketika harus menghitung interval antara dua waktu. Setelah bertanya-tanya ke Om Google dan mencoba beberapa kode akhirnya saya mendapatkan pengganti dari fungsi DateDiff ini yaitu: TimeSpan

Saya membuat contoh kode berikut dalam VB.net:

Dim awal As DateTime = New DateTime(2010, 12, 1, 12, 13, 9)
Dim akhir As DateTime = New DateTime(2011, 1, 12, 13, 22, 10)

Dim dd As Double = DateDiff(DateInterval.Second, awal, akhir)

Console.WriteLine("awal : " & awal.ToString("dd/MM/yyyy HH:mm:ss"))
Console.WriteLine("akhir : " & akhir.ToString("dd/MM/yyyy HH:mm:ss"))

Console.WriteLine("selisih jam: " & DateDiff(DateInterval.Hour, awal, akhir))
Console.WriteLine("selisih menit: " & DateDiff(DateInterval.Minute, awal, akhir))
Console.WriteLine("selisih detik : " & DateDiff(DateInterval.Second, awal, akhir))
Console.WriteLine("HH:mm:ss --> " & ((dd - (dd Mod 3600)) / 3600 & ":" & (((dd - (dd Mod 60))) / 60) Mod 60 & ":" & (dd Mod 60)))

Hasilnya seperti gambar berikut:

Lalu bagaimana dengan C#? Saya mengubah kode diatas menjadi C# dan menggunakan TimeSpan.

DateTime awal = new DateTime(2010, 12, 1, 12, 13, 9);
DateTime akhir = new DateTime(2011, 1, 12, 13, 22, 10);
TimeSpan span = akhir.Subtract(awal);

double d1 = span.TotalSeconds;

Console.WriteLine("awal : " + awal.ToString("dd/MM/yyyy HH:mm:ss"));
Console.WriteLine("akhir : " + akhir.ToString("dd/MM/yyyy HH:mm:ss"));
Console.WriteLine("selisih hari: " + span.TotalDays);
Console.WriteLine("selisih jam: " + span.TotalHours);
Console.WriteLine("selisih menit: " + span.TotalMinutes);
Console.WriteLine("selisih detik : " + span.TotalSeconds);
Console.WriteLine("HH:mm:ss --> " + ((d1 - (d1 % 3600)) / 3600 + ":" + (((d1 - (d1 % 60))) / 60) % 60 + ":" + (d1 % 60)));

hasilnya:

Jika diperhatikan, ada sedikit perbedaan dalam hal ketelitian ketika menggunakan DateDiff dan TimeSpan, tetapi hasil akhirnya (dalam jam:menit:detik) tetap sama. Dan ini sesuai dengan yang saya butuhkan.

Tambahan:
Sebenarnya dengan TimeSpan, untuk mendapatkan selisih jam, menit detik tidak perlu repot-repot menghitung total detik dengan rumus di code diatas. Cukup dengan kode

Span.ToString()

akan mendapatkan hasil dengan format day.HH:mm:ss.

Semoga bermanfaat. Happy coding.

Membuat Form Pendaftaran User Dengan Custom Tool CreateUserWizard

Tool CreateUserWizard adalah kontrol yang digunakan untuk membuat atau mendaftarkan user baru ke sistem ASP.net membership. Dengan tool ini kita bisa mendaftarkan user ke database ASP.net membership tanpa perlu menulis kode untuk menyimpan ke database. Semua proses dilakukan di belakang layar.

Di artikel sebelumnya saya telah menulis sedikit tentang tool ini. Secara default ada dua langkah ketika membuat user baru

  1. CreateUserWizardStep yang berisi 6 textbox isian
  2. CompleteWizardStep, jika user baru telah terbentuk

Read the rest of this entry

String Enskripsi Pake C#

Sekitar setahun yang lalu, di projek yang kita kerjakan, ada modul yang berfungsi untuk melakukan enskripsi string. Ceritanya, setiap query string yang dikirim ke suatu page akan di sandikan sehingga user tidak melihat informasi parameter yang kita kirimkan. Kode ini dibuat rekan yang sekarang sudah transmigrasi ke kantor laen dan sedikit kumodifikasi. Karena kode ini sepertinya penting di masa-masa mendatang, aku muat aja disini. Siapa tau dibutuhkan sewaktu-waktu.

Read the rest of this entry

Menggunakan class C# dan VB bersama-sama dalam satu aplikasi

Beberapa waktu yang lalu, dalam suatu projek, kami mendapat suatu class yang ditulis menggunakan C# dari internet, sedangkan aplikasi yang kami bangun menggunakan VB.NET. Karena kodenya cukup panjang, terlalu merepotkan kalo harus mentranslate ke VB.NET. Setelah browsing dan tanya-tanya ke Om Google kami menemukan teknik menggabungkan 2 bahasa tersebut.

Di ASP.NET 2.0, kita bisa menggabungkan web form yang ditulis menggunakan C# maupun VB.NET dalam satu aplikasi web. Kita juga bisa membuat class dengan bahasa yang berbeda. Meskipun secara default penulisan class dengan bahasa yang berbeda tidak diperbolehkan. Dengan sedikit perubahan setting pada web config, hal ini bisa dilakukan. Read the rest of this entry