Control your IIS 7.0 with .NET
Jika 3 minggu yang lalu saya memberikan sedikit tips tentang fitur Remote Management dalam IIS 7.0, maka sekarang saya ingin memberikan sedikit tips yang ditujukan untuk para developer tentang bagaimana kita dapat mengontrol IIS 7.0 dengan menggunakan code. Yap dengan menggunakan code, bukan dengan menggunakan script lagi. Caranya cukup mudah kita hanya tinggal menggunakan API yang ada dalam namespace Microsoft.Web.Administration. Namespace tersebut telah ada sejak .NET 3.0.
Okeh langsung aja saya akan kasih sedikit code yang dapat anda gunakan untuk membuat sebuah program kecil yang akan membuat sebuah website dan application pool baru di dalam sebuah IIS 7.0. Program ini berbasiskan command prompt dan akan menerima 5 masukan berupa string. contoh penggunaannya :
WebController.exe <nama situs> <nomor port> <nama host> <alamat virtual directory> <nama application pool>
baiklah mari sekarang kita mulai membuka visual studio 2008 kita, sebagai catatan saya menggunakan edisi express dan OS Vista Ultimate (biar ada IIS 7.0).
1. Buat sebuah project bertipe Console Application dengan nama WebController
2. Silahkan ketikkan code untuk melakukan authentifikasi seperti dibawah ini
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Principal;
using System.Runtime.InteropServices;
namespace WebController
{
class Program
{
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
const int LOGON32_IMPERSONATION_LEVEL = 2;
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword,
int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public extern static bool CloseHandle(IntPtr handle);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,
int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);
public static WindowsImpersonationContext ElevatePermission(string userName, string password)
{
var Domain = System.Environment.MachineName;
IntPtr pExistingTokenHandler = new IntPtr(0);
IntPtr pDuplicateTokenHandler = new IntPtr(0);
var coba = LogonUser(userName, Domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandler);
var duplikasi = DuplicateToken(pExistingTokenHandler, LOGON32_IMPERSONATION_LEVEL, ref pDuplicateTokenHandler);
Console.WriteLine(coba.ToString());
WindowsIdentity newID = new WindowsIdentity(pDuplicateTokenHandler);
return newID.Impersonate();
}
static void Main(string[] args)
{
}
}
}
3. kode diatas adalah kode yang akan kita pakai untuk melakukan impersonation. impersonation menurut bahasa saya adalah cara agar kode kita dieksekusi dengan hak seorang user. Kita perlu menggunakan impersonation karena untuk melakukan akses ke IIS 7.0 kita memerlukan login sebagai administrator.
4. Sekarang kita akan membuat code untuk menambahkan sebuah website, Namun sebelum itu kita perlu menambahkan sebuah referensi ke DLL Microsoft.Web.Administration. silahkan cari di C:/Windows/System32/inetsrv.
5. Setelah dll tersebut ditambahkan maka sekarang kita bisa bermain-main dengan kelas yang namanya ServerManager, dengan menggunakan kelas ini kita akan dapat mengontrol IIS kita. silahkan ketikkan kode dibawah ini untuk membuat aplikasi kita dapat menambahkan sebuah web site kedalam IIS 7.0
WindowsImpersonationContext imper = ElevatePermission("nimda", "lontong");
using (ServerManager serverManager = new ServerManager())
{
ApplicationPool p = serverManager.ApplicationPools.Add(args[4]);
p.ManagedRuntimeVersion = "v2.0";
p.ManagedPipelineMode = ManagedPipelineMode.Classic;
Site newSite = serverManager.Sites.Add(args[0], "http", "*:" + args[1] + ":" + args[2], args[3]);
newSite.Applications[0].ApplicationPoolName = args[4];
serverManager.CommitChanges();
}
imper.Undo();
6. silahkan build project anda dan eksekusi hasil exenya seperti berikut :
WebController.exe NamaWeb 8080 NamaHost D: NamaAplikasi
7. Ketika anda telah mengeksekusinya silahkan buka IIS Manager anda, kemudan perhatikan bahwa pada tree Sites telah ada sebuah situs baru dengan nama "NamaWeb"
, kemudian pada application pool telah ada sebuah aplikasi baru dengan nama "NamaAplikasi"
Cukup mudah bukan mengatur IIS 7.0 lewat .NET, kelas-kelas dalam namespace Microsoft.Web.Administration pun akan memberikan anda keleluasaan yang lebih dalam mengatur IIS 7.0 mulai dari konsumsi bandwith per website, pengaturan applicatioon pool, Web site, virtual directory dan banyak opsi2x lainnya. bagi anda yang tertarik untuk membuat panel seperti Cpanel atau Plesk maka anda dapat mengekplore namespace ini.
cheers....