|
ASP.NET 2.0 da Varsayılan Sağlayıcıyı Değiştirmek |
|
Gönderiliyor lütfen bekleyin... |
|
|
Gerek WebPart, gerek herhangi bir Membership componenti içeren bir proje olsun, gerek Personalizasyon(kişiselleştirme) içeren bir proje olsun gerekse WebEvents (web olayları – kullanıcı izleme)içeren bir projemiz olsun bu projeleri default(varsayılan) bir veritabanında tutmamız gerekicektir. Bu makalede projemizi nasıl istediğimiz bir veritabanına enjekte edeceğimize değineceğiz.
Basit olarak başlamak gerekirse elimizde Login yada Webpart componentleri eklenip kullanılabilinen bir proje var gibi düşünelim. Ve kendimize bir veritabanı seçelim ( mssql, mysql, oracle gibi ) Benim burada kullanacağım veritabanı ise Sql2000 olacak aslında Sql2005 e de çevirebilirdik fakat bu sadece bağlantı cümlemizle alakalı bir durum. Buna makalemizde değineceğiz.
Not: Eğer ki neden Access veritabanı kullanmıyoruz diye soracak olursanız Whidbeyin beta 1 inde .mdb ile yani Access ile bu işlem oluyordu fakat zaten beta 2 de .mdf yani SqlExpress desteği gelince buna gerek duyulmamış diye düşünüyorum çünkü Accesse entegre etmek için kullanılan tüm assembly yani kodlama tipleri final versiyonunda çıkartılmış. Ama şayet ilerde bununla ilgili bir şeye rastlarsam burada belirteceğimden emin olun.
Adım Adım Provider Ayarları
1. Boş bir veritabanı yaratalım. Sql2000 için basitçe ele alıyorum. Başlat>Tüm Programlar>Microsoft SQL Server>Enterprize Manager diyerek sunucumuza gelelim. Ve oradan yeni isimli bir veritabanı yaratalım.
2. Bu pencereyi kapatıp buradan çıkalım sonra Başlat>Çalıştır a şu yolu yazarak buradan devam edelim C:\WINDOWS\Microsoft.NET\Framework\ burada en son Framework sürümünü seçelim ve onun içerisindeki aspnet_regsql.exe yi çalıştıralım. Bu program sayesinde bizim varsayılan veritabanındaki dosyaları gösterdiğimiz veritabanına kopyalayacaktır. Evet, çalıştırdıysak devam edebiliriz.
3. İlk gelen ekranı Next(ileri) diyerek geçelim. Ve buradan Configure SQL Server seçeneğini seçip ilerleyelim.
4. Karşımıza çıkan ekranda serverımızın özelliklerini girelim.
5. Sonraki ekranları ileri diyerek geçebiliriz. Şimdi elimizde Asp.net in kişiselleştirme ya da profil tablolarını ve veritabanı ilişkilerini veritabanımıza enjekte etmiş bulunuyoruz.
6. Şimdi projemizi açalım ve Web.Config dosyasına girelim.
7. Projemizin öncelikle diğer veritabanının yolunu gösteren bir bağlantı cümlesine ihtiyacı var bunun için <connectionStrings> tagini ele alalım.
<connectionStrings>
<add name="BaglantiIsmy" connectionString="BaglantiCumlesi" />
</connectionStrings>
|
Benim kullandığım bağlantı cümlesi yapısı şöyle :
Data Source=Server ismi;Initial Catalog=veritabanınızın ismi;User ID=sa;Password=varsa sa şifreniz
8. Sitemizde kullanacağımız özellikleri şimdi seçelim Asp.net 2.0 ile beraber gelen özellikler aşağıda listelenmiştir:
- Membership : Üyelik yönetim APIsi.
- Roles : Üyelendirme bazlı olarak üyelere verilen hakları temsil eden protokoldür. Bunun sayesinde erişim hakları düzenlenebilir.
- Profile : Kişiselleştirme bu sayede üyelerimize belirttiğimiz özellikleri entegre edebiliriz. Aslında veritabanından farklı olarak kullanılan bir özelliktir fakat istenirse veritabanına da bağlanılabilir.
- Web Part Kişiselleştirme : Webpartların ayarlarının her üyeye göre kişiselleşmesini sağlar yani her üyenin site üzerinde yaptığı ayarları otomatik kaydetmeye yarar.
- Web Events : Yani web olayları, uygulamanın runtimeda aldığı aksiyonları loglanmasını(kaydedilmesini) ele alan frameworktür.
A. Öncelikle projemizde Membership ayarlarını ele alalım bu bizim Login componentlerini yani giriş bölümlerimizi kullanacağımız veritabanını belirler ToolBox(araç kutusu) dan Login sekmesi altındaki tüm componentler bizim belirttiğimiz sağlayıcıyı kullanacaktır. Bu ayarı yapmak için Web.Config dosyasındaki <system.web> sekmesinin içine girelim.
<membership defaultProvider="ProviderIsmi">
<providers>
<remove name="AspNetSqlProvider" />
<add name="ProviderIsmi"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="BaglantiIsmi"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="/" />
</providers>
</membership>
|
Yönergelerimize bakalım:
- name: Providerın(sağlayıcının) ismi
- defaultProvider: Tanımlanmış bir sağlayıcının tüm sistemde varsayılan olarak kullanılmasını sağlar
- type: Temel alınan sağlayıcının .dll’ini belirtir sabit bir değer. Kullanacağımız tipe göre değişiklik gösterebilir.
- connectionStringName: Web.config de tanımlı bir bağlantı cümlesi.
- applicationName: Hangi projede kullanılacaksa onun ismi. Bir veritabanında birden çok projenin bilgileri tutulabilir bu değeri girerseniz sağlayıcınız tanımladığınız projeye göre özelleşecektir.
- passwordFormat: Veritabanında kullanılacak şifreleme. Varsayılan değer hash şifrelemedir.
- enablePasswordRetrieval: Şifre geri isteme açık mı kapalı mı (true: açık. false: kapalı). Varsayılan değer açıktır.
- enablePasswordReset: Şifreyi sıfırlamak açık mı kapalı mı? Varsayılan değeri açıktır.
- requiresQuestionAndAnswer: Şifre geri istemede ve sıfırlamada gizli sorunun açık olup olmadığıdır. Varsayılan değeri açıktır.
- requiresUniqueEmail: Veritabanımızda sadece tek e-mail mi olsun seçeneği yani aynı e-maille kimse kayıt olsun mu olmasın mı? Varsayılan değeri açık.
- maxInvalidPasswordAttempts: Şifre ve kullanıcı adının kaç defa yanlış girilebileceğini burada belirtebilirsiniz. Eğer kullanıcı bu değeri aşarsa otomatikman o kullanıcının hesabı kilitlenir. Varsayılan değeri 5.
- passwordAttemptWindows: Eğer bir kullanıcı bloklanmışsa onu açmak için kaç dakika bekleyeceğini ayarlamanızı sağlar. Varsayılan değer 10 dakikadır.
- commandTimeout: Select, Insert gibi bağlantı cümlelerinin veritabanında kaç sn süreyle kalacağını ayarlayan bölüm. Varsayılan 30 sn.
- description: Yarattığımız sağlayıcının açıklaması isteğe bağlı bir bölüm.
Evet, özellikleri istediğiniz şekilde belitmişseniz aslında ne kadar uzun kodlarla yaptığımız şeyleri 2 satırda dilegetirdiğimizi farketmiş olacaksınız. (kullanıcı kilitleme şifre geri isteme gibi)
Not: Aslında buraya kadar aldığımız yapı sabir bir yapı sadece tip değişkenini değiştirerek diğer özellikler için de aynı <providers> sekmesini kopyalayabilirsiniz.
B. Rol yönetimi bu özelliği aktiflemezsek veritabanımızdaki üyelerin derecelendirme(Role) tablosu ile arasındaki ilişkiyi kulanamayız( Bknz: en alttaki ilişkilendirme tablosu ). Eklemek için yine <system.web> altında:
<roleManager enabled="true" defaultProvider="ProviderIsmi">
<providers>
<add
connectionStringName="BaglantiIsmi"
name="ProviderIsmi"
type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager>
|
Gördüğünüz gibi değiştirdiğimiz 2 şey var <roleManager> altında yani rol değişikliği altında bir sağlayıcı tanımlıyoruz bu aynı bağlantı cümlesini alıyor tek farklı değişken tipi.
C. Profil ayarlarımızı da veritabanımızda saklayabiliyoruz. Veritabanımızda özelliğin ismi(PropertyName), değeri(Value) ve son güncellenme tarihi(LastUpdatedDate) tutulmakta. Profil sağlayıcıları için yapılan değişiklik ana sekmentimiz <system.web> altında <profile> altında tanımlayacağız :
<profile>
<providers>
<add name="ProviderIsmy"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="BaglantiIsmi"
/>
</providers>
</profile>
|
D. WebPartlarımızın kişiselleştirilmesini kullanıcının sitede yaptığı her değişikliğinin kaydedilmesi ve en son girdiğinde yine yaptığı son ayarla girmesi gibi değerlerin tutulmasını sağlamak için kullanırız(örnk: http://my.msn.com/). Bunun için yapmamız gereken ayar ise yine <system.web> altında şunları ele almak:
<webParts>
<personalization defaultProvider="ProviderIsmi">
<providers>
<add
name="ProviderIsmi"
type="System.Web.UI.WebControls.WebParts.
SqlPersonalizationProvider"
connectionStringName="BaglantiIsmi"
/>
</providers>
</personalization>
</webParts>
|
Evet, bu kadar yaptığımız şey dikkatinizi çekmiştir sadece tip ve ana sekmentimizi değiştirmek oldu. Şimdi sitemizde olan tüm WebPartlar belirtilen kullanıcıya göre veritabanında depolanacaktır.
E. Events yani olayların da (sayfa açılması kapanması, ne zaman açılmış, kim ne açmış, .. gibi) veritabanında depolanmasını istersek eğer ona uygun da sağlayıcı(provider) yazabiliyoruz bunun için ilgili Event(olayın) Web.Config deki sekmentinin altına <provider> sekmentimizi eklemeliyiz :
<providers>
<add name="ProviderIsmi"
type="System.Web.Management.
SqlWebEventProvider,System.Web"
connectionStringName="BaglantiIsmi"
maxEventDetailsLength="1073741823"
/>
</providers>
|
Not: Burada maxEventDetailsLenght olayın açıklamasının maximum boyutunu ifade etmektedir.
Bu makalede Asp.net in belirli bir veritabanına bağlı olmadığına değindik ve projemizi farklı bir veritabanında çalıştırdık. Bu işlem büyük projeler için veritabanımızı daha güçlendirmemizi sağlar. Yada projemizi eğer küçükse öyle ağır veritabanından kurtarıp küçük bir veritabanına de enjekte etmemizi sağlayacaktır.
Tablo ilişkileri diagramı :
Ek dosyada bu konuyla ilgili Asp.net 2.0 Membership kullanan düzenlenmiş bir küçük bir proje vardır. Birazda araştırmanız için sql veritabanımıza koyduğumuz tablolar ve ilişkilerin bulunduğu küçük bir access dosyasıda ekte yer almaktadır.
Unutmayın "Çalışan program mutlu programcı demektir". Bu makalenin yazımında destek veren tüm arkadaşlarıma teşekkürlerimi sunarım.
İyi .net ler dileğiyle.
Ali Hıdımoğlu
Makale:
ASP.NET 2.0 da Varsayılan Sağlayıcıyı Değiştirmek ASP.NET Ali Hıdımoğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|