Unutulmaması gereken bir konu da Machine.config dosyası sadece ASP.NET uygulamaları için değil; tüm makina için gerekli yapılandırma ayarlarını içerir. Bu yüzden yapılandırmaları Machine.config de değil Web.config’de yapmak en mantıklısıdır. Web.Config dosyasını kullanarak tüm uygulamamıza tek bir dosyadan ulaşıp uygulamamızın yapılandırmasını tamamen tekelimize alıp en üst düzeyde performans sağlayabiliriz. Örneğin; uygulamamızın farklı yerlerinde farklı Web.config dosyaları kullanarak farklı düzeyde güvenlik, hata yönetimi, derleme durumu, oturum yönetimi, şifreleme ve bir çok farklı yapılandırmaları kullanabiliriz. Bu da bize hatırı sayılır bir esneklik kazandıracaktır.
Bir Web.config dosyası standart XML bildirimi ile (<?xml version...) başlar fakat bu olmadan da çalısabilir. Ama Web.config dosyası mutlaka <configuration> bildirimini ve bu bildirimler içinde de <system.web> etiketlerini barındırmak zorudandır. Aşağıda Visual Web Dewoloper 2005 beta ile birlikte Microsoft geliştiricilerinin hazırladığı örnek bir ASP.NET uygulaması olan StarterKit’in Web.config dosyasından bir kısım bulunmaktadır. Bu ayarları ve denetimleri örnek alarak incelemeye başlayalım.
<?xml version="1.0"?> <configuration> <location path="Admin/Albums.aspx"> (admin dizinindeki albüm.aspx ile ilgili ayarlar) <system.web> <authorization> (hangi hesap yada rollerin kaynaklara ulaşabileceğini bildiren öğenin başlangıcı ) <allow roles="Administrators" /> ( burda admin grubundan herkesin girebileceği belirtiliyor.) <deny users="*"/> (bu sayfaya giremeyecek grup "*" karakteri ile herkes(admin harici)) </authorization> </system.web> </location> <system.web> <customErrors mode="Off"></customErrors> (Hata sayfalarının yapılandırılması) <compilation defaultLanguage="C#"/> (uygulama dili seçimi) <authentication mode="Forms"> (kimlik denetiminin yapılma stili belirtiliyor- burda forums denetimi seçilmiş ) <forms name=".ASPXAUTH" loginUrl="Default.aspx" protection="Validation" timeout="300"/> (kullanıcının login olmak için gideceği sayfa, kimlik doğrulama yöntemi ve süresini belirtiliyor.) </authentication> <globalization requestEncoding="utf-8" responseEncoding="utf-8"/> <roleManager enabled="true"> </system.web> </configuration> |
ASP.NET Yapılandırma elemanları
Yapılandırma öğeleri Camel case(deve biçimli) ve büyük/küçük harf duyarlıdır. Deve biçimli yapılandırma öğeleri; bir yapılandırmanın ilk kelimesini ilk harfi küçük; ikinci ve sonra gelen kelimelerin ilk harfleri büyüktür. localOnly gibi.Aşağıdaki anlatımda sözdizimlerinde kullanılabilecek tüm değerler verilmiştir örneğin; batch="true|false" true yada false değerinden biri, enableSessionState="true|false|ReadOnly" true, false veya ReadOnly seçeneklerinden biri kullanılabilir.
1. <httpRuntime>
<httpRuntime> öğesi ASP.NET HTTP motorunun çalışma zamanındaki çesitli özelliklerini denetler. Kullanımı ve söz dizimi;<httpRuntime> appRquestQueulLimit="istek sayısı" executionTimeout="saniye" maxRequestLength="kbayt" minFireThreads="bekletilecek en düşük iş parçası sayısı" |
- appRquestQueulLimit: bir 503-Server Too Busy hatası vermeden önce ASP.NET in kuyruğa sokacağı istek sayısını belirler. Varsayılan değeri 100’dür.
- executionTimeout: Klasik ASP’deki Server.ScriptTimeout özelliğine benzer ve uzun süre bekleyen ve asılı kalan istekleri kapatılmadan önce yürütüleceği saniyeyi belirtir. Varsayılan değeri= 90 saniyedir.
- maxRequestLength: Kilobayt olarak gelen dosya yüklemelerinin en büyük boyutunu belirler.Bu özellik sunucunuza büyük dosya yükleyerek yapılan saldırılar için çok önemlidir. Bu öznitelik için varsayılan değeri ise 4,096 kbayt.
- minFireThreads: ASP.NET’in yeni istek işlemek için bekleleteceği
en düşük is parçası sayısıdır. Varsayılan değeri 8’dir.
2. <Compliation>
ASP.NET’in en kampsamlı yapılandırma öğesidir. Bu yapılandırma genelde Web Servisleri ve diğer ASP.NET web uygulamalarının kodlarının derleme biçimlerinini içeren özniteliklerden oluşur. Kullanımı ve sözdizimi;<Compliation batch="true|false" batchTimeout="saniye" debug="true|false" defaultLangue="Kullanılan uygulama dili" explicit="true|false" maxBatchSize="Sayfa sayısı" maxBatchGeneratedFileSize="kbayt" numRecompilesBeforeAppRestart="sayı" strict="true|false" tempdirectory="dizin"> <compiler extension="dosya uzantıları" compilerOptions="derleyici ayarları" type=".NET türü" warningLevel="sayı" </compiler> <assemblies> <add assembly="montaj adı"/> <remove assembly="montaj adı"/> </assemblies> </Compliation> |
- batch: Uygulamanızın ASP.NET sayfalarının toplu halde derlemeyi destekleyip desteklemediğini belirtir. "true" değerini seçerseniz toplu derleme desteklenir. Varsayılan değer true. "false" değerini seçerseniz her sayfa çağırıldığında derlenir. Bu da pek iyi bir seçenek değildir.
- batchTimeout: Bu öznitelikle eğer toplu derlemeyi (<batch>) true olarak seçtiyseniz toplu derlemenin zaman aşımından önce geçecek süreyi saniye olarak belirtir. Varsayılan değer 15 saniyedir.
- debug: ASP.NET sayfalarının ve Web Servislerinin derlenmiş montaja hata ayıklama bilgilerinin eklenip eklenmeyeceğini belirtir. Bu özelliğin her zaman "false" olması daha uygundur varsayılan olarakta "false" olarak belirlenmiştir. Çünkü hata ayıklama montajları büyüktürler ve bu bazı sorunlara neden olabilir.
- defaultLangue: Bu özelliğin varsayılan değeri VB.NET’dir. Bu derleme sırasında kullanılacak dili belirtir ki bu ve buna benzer bir çok yapılandırma otomatik olarak uygulamanıza eklenir. Örneğin Visual Studio ile bir C# Web uygulaması başlattığınızda Visual Studio sizin için oluşturacağı Web.config dosyasına <compilation defaultLanguage="C#"/> belirtimini ekler.
- explicit: Bu denetim VB.NET için geçerlidir bu yüzden geçiyoruz.
- strict: Bu denetim de VB.NET için geçerlidir varsayılan ayarı false’dır.
- tempdirectory: Derlemeden kaynaklanan geçici ASP.NET dosyalarının adreslerinin belirtildiği özniteliktir. Geçerli herhangi bir dizin olabilir.
- compiler
b. compilerOptions: Derleme sırasında geçirelecek derlemeye özgü tüm seçenekleri içerir. Kullanılabilen bir seçenek belirlemeyi ya varsayılan ayar alarak Visual.Studio ya da kullandığınız uygulama geliştirme aracına brakın yada geçerli bir seçenek bulmak için SDK belgelerine bakabilirsiniz.
c. type: default languae yada extension özniteliklerindeki uzantıyı kullanarak hangi sınıf ve/veya montajların kullanılacağını belirtir. Fakat bu nitelikle oynamamak en iyisidir zira zaten bizim için bu varsayılan şekliyle kabul edilir. Ayrıca bu varsayılan ayarların çoğu zaman yeterlidir.
d. warningLevel: Bu nitelikde derleyici hatalari ile ilgilidir. Derleyicinin verdiği uyarı iletisi türlerini belirleyen düzey denetimidir. C# için varsayılan olarak "1" değeri belirlenmiştir. Herhangi bir degişiklik yapmak pek gerekmez.
- <assemblies>
b. <remove assembly: Derleme sırasında kullanımdan kaldırılmak istenen montajların belirtilmesi için varolan yapılandırmadır. Bir üst de eklenen (add assembly ile) montajlar silinebilir. BU öznitelikte de "*" karakteri kullanılarak bütün montajlar silinebilir fakat bu add assembly’deki kadar sağlıklı değildir.
3. <pages>
Bu özellik genellikle sayfa düzeyi özniteliklerine ait varsayılanlari ayarlamaya izin verir. Tüm ASP.NET sayfalarında (@ Page ASP.NET komutu bulunanlar hariç) geçerlidir. Bu öğenin kullanımı ve söz dizimi ise şöyledir:<pages> autoEventWireup="true|false" buffer="true|false" enableSessionState="true|false|ReadOnly" enableViewState="true|false" enableViewStateMac="true|false" pageBaseType="türadı, montaj" smartNavigation="true|false" userControlBaseType="türadı"/> <pages> |
- autoEventWireup: Varsayılan ayarı true’dur. Page_Load ve benzeri sayfa olaylarının otomatik olarak desteklenip desteklenmeyeceğini belirleyeceğimiz özniteliktir. "false" seçilirse olay desteği sağlanmayacaktır.
- buffer: Bu özellikl çok önemlidir; önbelleğe alınıp allınmamaya dair ayarlar bu öznitelikten yapılır. ASP’deki Response.Buffer özelliğine benzer. Varsayılan değeri true olarak atanmıştır. Eğer "false" değerini seçersek sayfalar çağırıldıkça gönderilir. Bu yapılandırma, hız açısından çok önemlidir.
- enableSessionState: Geçerli kullanıcı için varsayılan ayar olarak bir ASP.NET sayfası tarafından yeni bir oturum acılıp açılmayacağına karar verir. Eğer bu niteliği "false" olarak ayarlarsanız kullanıcı önceki bir sayfadan zaten bir oturumu varsa, bu öznitelik o oturumu etkilemez. Diğer taraftan "ReadOnly" olarak ayarlanırsa sayfanın önceki ayarlarının değişmesi önlenir. Varsayılan değeri "true"’dır.
- enableViewState: ViewState’ in (ASP.NET server controls sayfa istekleri durum depolama yöntemi) etkin olup olmayacağına karar verilen öz niteliktir. "true" seçilmesi durumunda ViewState etkindir. "false" da ise ViewState etkin değildir ve sunucu denetimi her istekte sıfırlanır.
- pageBaseType: Bu özniteliğin ASP.NET geri koddaki System.Web.UI isim alanını Page sınıfından alınmasını sağlamaktır.
4. <customErrors>
ASP.NET’te çok kullanılan bir diğer öğe de uygulamamızın hata durumlarında verdiği mesajlarını özelleştirmemize imkan veren <customErrors> özniteliğidir. Bununla ayrıca ASP.NET’in ürettiği ham hataları da yönetebilirsiniz. Yukarıda StarterKit’in Web.config dosyasındaki kullanımı da bakabilirsiniz <customErrors mode="Off"></customErrors> şeklinde kullanılmıştır şimdi daha detaylı olarak bakalım Söz dizimi ve kullanımı;<customErrors defaultRedirect="gecerli bir url" mode="on|off|RemoteOnly" <error redirect="gecrli url" statusCode="hata durumlarinda kullanacagimiz kod"/> </customErrors> |
- defaultRedirect: Bir hata olduğunda kullanıcının yönlendirileceği sayfayı belirlediğimiz kısım burasıdır.
- mode="on|off|RemoteOnly": Bu öğe ham ASP.NET hatalarının kullanıcıya gönderilip gönderilmeyeceğine karar verir.
<customErrors mode="Off"></customErrors> burda görüldüğü gibi Starter Kit yapımcıları bunun olmasını istememiş ve "Off" olarak belirtmişler. Böylece oluşan her hatada ASP.NET in kendi hata sayfaları görükecektir. Yalnız bu değeri seçmek pek mantıklı değildir. Zira kullanıcılar sizin istemediğiniz bir cok bilgiyi görebilir, bu yüzden tavsiye edilmez. Eğer bu değer “On” olarak belirtilseydi özel hatalar etkin olacaktı ve kullanıcı <defaultRedirect="hata URL si>" ne yollanacakdı yada daha iç bir öge olan <error>’a yönlendirilecekti. Bir diğer değer olan "RemoteOnly" seçildiginde ise; özel (ham) hatalar yerel sunucu daki kullanıcıya gözükecek ama uzak istem yapan(local olmayan) kullanıcıyı ise sadece uzak istemciler için geçerli olan bir hata sayfasına yönlendirecektir. Yani RemoteOnly seçili olduğunda ham hataları sadece geliştirici görebilir. - <error: Bu alt etiket daha fazla hata denetimi sağlar hatanın HTTP durum kodlarına dayanarak "statusCode"(404-Not found vs.) de belirttiginz kodu kullanır ve koddakine uygun bir hata olursa "redirect" te bildirdiğiniz URL ye gider.Bu alt etiket olmadan da sadece <customErrors> un ilk öğesi olan <defaultRedirect> te kullanılabilir. Böylelikle bütün hatalar <defaultRedirect> teki URL’ye yönlendirilir.
5. <globalization>
Bu öge ASP.NET te uygulamanın genelleşmesi ayarlarını denetler. Yukarıdaki örnekte de StarterKit’in Global ayarları için kullanıldığını görebilirsiniz. Bu, istek,yanıt ve dosyalar için kullanılan kodlamanın yani sıra web uygulamanızdaki yerel kültürel(dil vb.) ayarları da içerir. <globalization> öğesinin söz dizimi aşağıdaki gibidir;<globalization culture="herhangi gecerli kültür bildirim dizesi" fileEncondig="herhengi bir gecerli kodlama dizesi" requestEnconding="herhengi bir gecerli kodlama dizesi" responseEncondig="herhengi bir gecerli kodlama dizesi" uiCulture="gecerli(yerel kültür) dize bildirimi"/> |
- requestEnconding: karakter kodlaması(gelen istek) için kullanılır yukarıdaki uygulamada "utf-8" olarak bildirildiğine dikkat edin. Bu özniteliği ayarlamaz iseniz varsayılan olarak"utf-8" kabul edilecektir.
- responselEncondig: karakter kodlaması(giden istek) için kullanılır yukarıdaki uygulamada "utf-8" olarak bildirildiğine dikkat edin. Bu özniteliğide ayarlamaz iseniz varsayılan olarak "utf-8"i kabuledecektir.
- uiCulture: Bu özellik yerel kültüre özgü ayarlamalar için kullanılır, Bu tür yerel dizeler için System.Globalization.CultureInfo sınıfından yararlanabilirsiniz.