Makale Özeti

Bu yazının birinci bölümünde Smart lient Kavramı açıklanmış ve smart client uygulamalarının nerelerde kullanılıp nerelerde kullanılamayacağı anlatılmıştı. Yazının bu bölümünde basit bir örnek uygulama yaparak bu tür uygulamaların nasıl oluşturulduğu ve nasıl kullanıldığı incelenecektir.

Makale

Smart Client Uygulaması

Bu yazının birinci bölümünde Smart lient Kavramı açıklanmış ve smart client uygulamalarının nerelerde kullanılıp nerelerde kullanılamayacağı anlatılmıştı. Yazının bu bölümünde basit bir örnek uygulama yaparak bu tür uygulamaların nasıl oluşturulduğu ve nasıl kullanıldığı incelenecektir.

Örnek Uygulama

Örnek uygulamada hemen hemen tüm uygulamalarda bulunan ve kullanılan login (sisteme giriş) ekranı yapılacaktır. Bu ekran tamamen windows Application ortamında hazırlanacak ve daha sonra Web ortamında oluşturulacak yeni bir IIS üzerinden hizmete sunulacaktır. Client makinalar ise bu adres üzerinden uygulamaya erişip uygulamayı kullanacaklardır.

Önce Visual Studio.Net te boş bir Solution açılır(Blank Solution). Bu Solution a ise isim olarak OrnekSmartClientUygulamasi ismi verilir(Şekil 1).

         Şekil 1          Yeni bir Solution Yaratma

 

Daha sonra Bu oluşturulan Solution a projeler eklenir. Önce Login ekranın yapılacağı bir Windows Uygulaması Projesi oluşturulur(Şekil 2).

          Şekil 2         WinAppLogin Windows Uygulaması Projesi Yaratma

 

Bu projenin ekran görünümü yapılarak kod yazımına başlanır. Ekran görünümü Şekil 3 tekine benzer bir yapıda olabilir.

         Şekil 3        WinAppLogin  Windows Uygulaması Projesi - Login Ekranı Örnek Dizaynı

 

Burada yapılacak olan, Tamam Butonuna basıldığı zaman oluşturulmuş bir Veri Tabanına gidip Login olmak isteyen kullanıcının Login olup olamayacağını denetlemek; eğer kullanıcı login olabilirse ona göre sayfayı yönlendirmektir.

Bu örnekte Sistemde 3 çeşit giriş yapılabilsin. Kullancı ya Admin olarak , ya bir Client olarak ya da ziyaretçi olarak sisteme girebilsin. Bunun her biri için farklı bir yönlendirme sayfası yapılmalıdır. Bunun için yeni bir proje daha Solution a eklenir. İsmi WinAppUsers olan bu proje de bir Windows uygulaması olsun(Şekil 4).

         Şekil 4        WinAppUsers Windows Uygulaması Projesi Yaratma

 

Bu projeye 3 adet form eklenerek Login ekranından kullanıcının girişine göre açılacak formlar oluşturulmuş olur. Bunlar örneği derinleştirmemek için basit formlar olsun(Şekil 5).

         Şekil 5        WinAppUsers Windows Uygulaması Projesi - Formlar

 

Bu uygulama Compile edilirken EXE (Windows Uygulaması) olarak değil de DLL (Class Library) olarak compile edilecektir. Bunun için Solution Explorer penceresi içindeki Projenin üzerine sağ tıklayıp açılan context menüden Properties seçeneği seçilerek gelen ekrandan OutPut Type Class Library olarak değiştirilir. Böylece bu üç form bir DLL içerisinde yer alacaktır. Eğer daha esnek bir yapı istenirse üç form içinde üç ayrı DLL oluşturulabilir. Bunun için üç ayrı Windows Application uygulaması açılması yeterlidir.

WinAppUsers Projesinin Build edilmesiyle elde edilen DLL i WinAppLogin Projesi içinde kullanmak için IIS kullanılacaktır. Bunun için Solution a bir Web Servisi eklenir(Şekil 6). İsmi SmartClientService olan bu bu web servisi DLL için gösterilen adres konumunda olacaktır.

         Şekil 6        SmartClientService Web Service Projesini Yaratma

 

Oluşturulan bu Service içine DLL i eklemek için Project Menüsünden Add Existing Item (Shift+Alt+A) seçeneği seçilerek WinAppUsers Projesinin Build edilmesiyle elde edilen DLL Servise eklenir.

Şimdi WinAppLogin Projesine geri dönülecek ve Login formunda kullanılacak olan kod bloklarının yazımına geçilecektir. Kod blokları Şekil 7 de gösterilecek ve konuyla ilgili görülen kod blokları açıklanacaktır.

Imports System.Data.SqlClient
Imports System.Reflection

                        ...
                         ...
                         ...

    Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click

        Me.Close()

    End Sub  

    Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click

        Dim conn As New SqlConnection("workstation id=KADIRE;packet size=4096;integrated security=SSPI;data source=KADIRE\VSdotNET;persist security info=False;initial catalog=deneme")  

        Dim query As String = "SELECT Person.TaskNo, Person.PersonName FROM Login INNER JOIN Person ON Login.ClientID = Person.PersonID WHERE     (Login.UserName = @UserName) AND (Login.Password = @Password)"  

        Dim cmd As New SqlCommand(query, conn)
        cmd.CommandType = CommandType.Text

        cmd.Parameters.Add(New SqlParameter("@Username", System.Data.SqlDbType.NVarChar, 50))
        cmd.Parameters.Add(New SqlParameter("@Password", System.Data.SqlDbType.NVarChar, 50))  

        cmd.Parameters(0).Value = txtUserName.Text
        cmd.Parameters(1).Value = txtPassword.Text  

        Dim dr As SqlDataReader  

        Try  

            conn.Open()  

            dr = cmd.ExecuteReader()  

            If Not dr.HasRows Then

                MsgBox("Yanlış Şifre ve/Veya Parola")

            Else  

                Dim sLocation As String = "HTTP://localhost/SmartClientService/WinAppUsers.dll"
                Dim FormDLL As [Assembly] = [Assembly].LoadFrom(sLocation)
                Dim FormType As Type
                Dim FormObj As Object
                Dim frm As Form  

                While dr.Read

                    Select Case dr(0)

                        Case 0
                            FormType = FormDLL.GetType("WinAppUsers.frmAdmin")

                        Case 1
                            FormType = FormDLL.GetType("WinAppUsers.frmClient")

                        Case 2
                            FormType = FormDLL.GetType("WinAppUsers.frmVisitor")

                        Case Else
                            MsgBox("Bilinmeyen Seçim")
                             Exit While

                    End Select

                    FormObj = Activator.CreateInstance(FormType)
                    frm = CType(FormObj, Form)
                    frm.Show()

                End While  

            End If  

        Catch ex As Exception  

            MsgBox("Bağlantı Hatası : " & ex.ToString)              

            txtUserName isimli Textboxa konumlandırılır.
            Me.Controls(1).Focus()
            txtPassword.Text = ""
            txtUserName.Text = ""  

        End Try  

        conn.Close()  

    End Sub  

    Private Sub frmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  

        txtPassword.Text = ""
        txtUserName.Text = ""  

    End Sub

         Şekil 7        WinAppLogin  Windows Uygulaması Projesi - Login Ekranı Kod Bloğu

 

Projeyi oluştururken önce

Imports System.Data.SqlClient
Imports System.Reflection

kod blokları projenin başına eklenir.

Tamam Butonuna basıldığı zaman önce SqlConnection ve SqlCommand nesneleri oluşturulur, parametreler tanımlanır ve Datareader kullanılarak verilerin Veri Tabanından alınması sağlanır. Veriler alındıktan sonra, eğer sisteme girmeye çalışan kullanıcı Veri Tabanında mevcut ise bu kullanıcının ne olduğuna bakılır. Ona göre sayfa yönlendirmesi gerçekleştirilir.

                Dim sLocation As String = "HTTP://localhost/SmartClientService/WinAppUsers.dll"
                Dim FormDLL As [Assembly] = [Assembly].LoadFrom(sLocation)
                Dim FormType As Type
                Dim FormObj As Object
                Dim frm As Form  

                While dr.Read

                    Select Case dr(0)

                        Case 0
                            FormType = FormDLL.GetType("WinAppUsers.frmAdmin")

                        Case 1
                            FormType = FormDLL.GetType("WinAppUsers.frmClient")

                        Case 2
                            FormType = FormDLL.GetType("WinAppUsers.frmVisitor")

                        Case Else
                            MsgBox("Bilinmeyen Seçim")
                             Exit While

                    End Select

                    FormObj = Activator.CreateInstance(FormType)
                    frm = CType(FormObj, Form)
                    frm.Show()

                End While  

         Şekil 8        WinAppLogin  Windows Uygulaması Projesi - Login Ekranı Kod Bloğundan Bir Bölüm

 

Şekil 8 de gösterilen kod bloğu Smart Client Uygulamasının nasıl oluşturulduğunu gösteren bloktur. Burada sLocation String değişkeni ile alınacak DLL in adresi tanımlanıyor ve bu DLL [Assembly] olarak alınıyor. Daha sonra Bu alınan DLL in hangi tipinin kullanılacağı kullanıcının girişine göre tanımlanıyor. Örneğin; Eğer kullanıcı Admin olarak giriş yapmışsa WinAppUsers.frmAdmin formu (Sınıfı) kullanılacaktır. Bu tip (Type) tanımlandıktan sonra Nesneye (Object) çevriliyor. Ve daha sonra bu nesnede form Nesnesine dönüştürülerek ekranda gösteriliyor.

Oluşturulan ve Compile edilip çalıştırılan bu EXE projeyi de (Aslında MSIL kod da denilebilir) Web Service in içine atarak Client tarafına bir şey yüklenmesi gerekmeyecektir. Service içine EXE yi eklemek için Project Menüsünden Add Existing Item (Shift+Alt+A) seçeneği seçilerek WinAppLogin Projesinin Build edilmesiyle elde edilen EXE Servise eklenir.

Yapılan bu uygulamayı .Net Framework yüklü olan bir Client tarafında çalıştırmak için yapılması gereken Şekil 9 da gösterildiği gibi

HTTP://localhost/SmartClientService/WinAppLogin.exe

satırını Windows içindeki Run altına ya da bir browser ın adres satırına yazmaktır.

         Şekil 9        Uygulamanın Çalıştırılması

 

İki Bölümden oluşan bu yazı dizisinde birinci bölümde Smart Client Kavramı incelendi ve bu tür uygulamaların nerelerde kullanılıp nerelerde kullanılamayacağı üzerinde duruldu. yazının ikinci bölümünde ise örnek bir uygulama demosu yapılarak Smart Client uygulamalarının nasıl oluşturulduğu gösterildi.

Başka yazılarla görüşmek üzere...

kadirerdogan@hotmail.com