Makale Özeti

ASP.NET Web.Config dosyasında neler yapılabilir?

Makale

Keşf-i Web.Config -2

Keşf-i Web.Config -1 isimli makalemde <authentication>,<authorization>,<customErrors>,<appSe ttings> web.config düğümlerinden bahsetmiştik. Devamı olan bu makalede ise <trace>, <globalization>, <pages>, <sessionState> web.config düğümlerinden bahsedeceğiz.

<trace> düğümü

ASP.NETde Trace isimli makalemde bahsettiğim gibi; Tracing web uygulamasının çalışma zamanındaki işlemler ile ilgili bilgilendirici mesajlar almayı sağlar. Bu mesajlar programcıya problemleri gidermede, performans analizinde yardımcı olur.

web.config dosyasındaki <trace> düğümü ile uygulama bazında trace ayarları yapılabilir.

<trace> düğümü yapısı

Yukarıdaki MSDN Documentationdan alınan resimde trace düğümünün yapısı gözükmektedir. Buradaki tüm özelliklerin ne olduğu, etkilerinin ne olduğunu ASP.NETde Trace başlıklık makalemden okuyabilirsiniz.

Bir uygulamada tracei aktif hale getirmek ve sonuçların her sayfanın sonunda gözükmesi için aşağıdaki şekilde ayarlanmış bir trace düğümü yeterli olacaktır.

<globalization> düğümü

Uygulamanın bölgesel ayarlarını düzenlemek için kullanılır. Burada yapılan ayarlar ile calendar kontrolünün ayları hangi dilde görüntüleyeceği, ondalıklı sayıların biçimi, dosyalara hangi encoding (şifreleme) erişileceği gibi ayarlamalar yapılabilir.

<globalization> düğümü yapısı

Yukarıdaki resimde <globalization> düğümü yapısı gözükmektedir. Burada yer alan özellikler:

  • requestEncoding : Uygulamaya gelen isteklerin encoding bilgisi ayarlarnır. Eğer bu özelliğe hiç bir değer atanmadıysa varsayılan olarak UTF8dir. VS.NETin oluşturduğu boş web.configde ve .net framework kurulduğunda oluşan machine.config dosyasında bu şekilde ayarlanmıştır. Eğer bu dosyalarda ayarlama yapılmadıysa encoding değeri web sunucusunun bölgesel ayarlarına bağlı olarak ayarlanır.
  • responseEncoding : Sunucudan istemcilere dönecek cevaplar için encoding belirlenir. Eğer bu özelliğe hiç bir değer atanmadıysa varsayılan olarak UTF8dir. VS.NETin oluşturduğu boş web.configde ve .net framework kurulduğunda oluşan machine.config dosyasında bu şekilde ayarlanmıştır. Eğer bu dosyalarda ayarlama yapılmadıysa encoding değeri web sunucusunun bölgesel ayarlarına bağlı olarak ayarlanır.
  • fileEncoding : ASP.NET çalışma zamanında .aspx, .ascx, .asmx, .asax gibi dosyalar ayrıştırılırken (parsing) kullanılacak encoding belirlenir.
  • culture : Gelen istekler için varsayılan kültür (culture) bilgisi belirlenir.
  • uiCulture : Bölgeye bağımlı kaynak işlemleri için varsayılan kültür (culture) bilgisini belirler.Yerelleştirme gibi durumlar kullanılabilir.

Uygulamanızın sağlıklı işlemesini garanti altına almak için requestEncoding ile responseEncoding değerlerini aynı yapmalısınız.

Uygulamanızın tüm bölgesel ayarlarını Türkiye ve Türkçe için ayarlarmak için aşağıdaki gibi bir globalization düğümü yeterli olacaktır.

<pages> düğümü

Bu düğüm ile uygulamadaki tüm sayfayı etkilene bazı ayarlamalar yapabilirsiniz.

<pages> düğümü yapısı

pages düğümünün ile değer atanabilecek özellikler şunlardır:

  • buffer : Web sayfalarının adres belleklemeyi kullanıp kullanmayacağını belirler.
  • enableSessionState : Uygulamada session bilgisi yönetiminin açık olup olmadığını belirler.
  • enableViewState : Uygulamada sayfalarda viewstate özelliğini açmak veya kapamak için kullanılır.
  • enableViewStateMac : ASP.NET sayfalarının istemciye viewstate bilgisi ile beraber bir MAC (message authentication code) gönderip göndermeyeceğini belirler. Bu özellik true olduğunda postbackler arasında gelen istemciden gelen viewstate bilgilerinin istemci tarafında gizlice düzenlenip düzenlenmediği belirlenir. Bu şekilde viewstate içindeki verilerin değiştirilmesine karşı güvenlik sağlanmış olur. Not: Bu özelliğin açık olması durumunda bazen sayfanızda hatalar oluşmaktadır. Çözüm için ya .NET Framework için gerekli olan güncellemeleri yüklemek yada bu özelliği false yapmak gerekmektedir.
  • autoEventWireup : Sayfa olaylarının otomatik olarak (sub isimlerine bağlı olarak) çalıştırılıp çalıştırılmayacağını belirler.
  • smartNavigation : Smart Navigation özellliğini açmak yada kapamak için kullanılır. Smart Navigation sadece Internet Explorer tarayıcısının 5.5 versiyonu veya üst versiyonlarında çalışmaktadır.
  • pageBaseType : .aspx sayfalarının varsayılan olarak miras alacağı codebehind sınıfını belirler.
  • userControlBaseType : .ascx sayfalarının varsayılan olarak miras alacağı codebehind sınıfını belirler.
  • validateRequest : Bu özellik .NET 1.1 ile eklenmiştir. validateRequest özelliği true olduğunda kullanıcının yaptığı veri girişleri kontrol edilir. Örneğin <> karakterlerini içeren mesajlar, potensiyel saldırı içeren kullanıcı girdileri olarak nitelendirilip, ASP.NET çalışma zamanı hata oluşturur. Eğer kullanıcın html kodları gibi değişik karakterler girebileceği bir uygulama yapıyorsanız bu özelliği false yapmanız gerekmektedir. Varsayılan değeri true olarak belirlenmiştir.

Specifies whether ASP.NET should run a message authentication code (MAC) on the pages view state when the page is posted back from the client. A view state MAC is an encrypted version of the hidden variable that a pages view state is persisted to when sent to the browser. If true, the encrypted view state is checked to verify that it has not been tampered with on the client.

<sessionState> düğümü

sessionState düğümü ile session (oturum) bilgileri ile ilgii ayarlar yapılır.

<sessionState> düğümü yapısı

sessionState düğümü düzenlenebilecek özellikleri aşağıdaki gibidir.

  • mode : Bu özellik ile session bilgisinin nerede saklanacağı ayarlanır. Alabileceği değerler :
    • Off : Session durumunu kapalı olarak ayarlar. Session ile çalışan kod yazılamaz.
    • InProc : Session bilgilerinin yerel olarak saklanacağını belirler.
    • StateServer : Session bilgisinin başka bir bilgisayar üzerinde saklanacağını belirler.
    • SQLServer : Session bilgisinin SQL Server üzerinde saklanacağını belirler.
  • cookieless : True değerini aldığında cookie olmadan session bilgisinin kullanılabilmesini ve istemcilerin tanımlamabilmesini belirler.
  • timeout : Session bilgisinin kaç dakika saklanacağını belirler. Varsayılan değer 20 dakikadır.
  • stateConnectionString : mode özelliği StateServer değerini aldığı zaman kullanılabilir. (Aksi halde bir değer atansa bile bir işe yaramaz.) Burada bir bilgisayarın adresi ve bağlanılacak olan port belirlenir. Örneğin : "tcpip=127.0.0.1:42424" gibi bir değer alabilir.
  • sqlConnectionString :  mode özelliği SQLServer değerini aldığı zaman kullanılabilir. (Aksi halde bir değer atansa bile bir işe yaramaz.) Burada SQL Server için bağlantı cümlesi yazılır. Örneğin : "data source=localhost;user id=sa;password=parola;" gibi bir değer alabilir.
  • stateNetworkTimeout : StateServer modunda session yönetimi yapılırken geçerli olan bu özellik ile ağ bağlantısı için zaman aşımı değeri belirlenir.Varsayılan değer 10dur.

Session bilgilerini niye StateServer ve SQL Serverda saklamaya ihtiyaç duyarım?

Web sunucusu ile aynı sunucuda saklanan session bilgileri hem sunucuya ekstra yük bindirecektir. Hemde sunucuda oluşacak bir hatada session bilgileride silinecektir. InProc yerine StateServer veya SQL Server kullanarak bir WebFarm oluşturmak bu iki sebepten dolayı duruma göre size performans ve veri güvenliği kazandıracaktır.

StateServer nasıl yapılandırılır?

  1. Windows Servisleri arasından ASP.NET State Service servisinin çalıştığından emin olun.
  2. Ardından aşağıdaki gibi bir web.config yapılandırılması ile çalıştırdığınız StateServerı session bilgisi yönetimi için kullanabilirsiniz


 

Yukarıdaki adımları yaptıktan sonra bir ASP.NETR sayfasında aşağıdaki kodu test edeniz. Sessiona yazılan bilgi StateServera yazıldı ve geri istek yapıldığında aynı StateServerdan okundu.

Not: Burada StateServer olarak yine aynı bilgisayarı kullandım ve ip adresi olarak 127.0.0.1 verdim. StateServerın essas amacı bilgilerin başka bilgisayarda saklanması olduğu için bu şekilde yapmanın bir anlamı yoktur. Ama bu sadece bir demo. :)

 

SQL Server nasıl yapılandırılır?

Session bilgilerini SQL Serverda saklamak için SQL Server üzerinde bir veritabanı oluşturulmalıdır. Bu veritabanı için aşağıda adresi verilen SQL scripti çalıştırılmalıdır.

Yukarıdaki SQL scriptini query analyzer ile sql server üzerinde çalıştırdıktan sonra aşağıdaki gibi bir sessionState düğümü tanımlamak yeterli olacaktır.

Bu script ASPState adında bir veritabanı oluşturur.

Yukarıda da gözüktüğü gibi bir veritabanı bağlantısı yaparken yazdığımız bir bağlantı cümlesinden tek eksik olan nokta veritabanı adının belirtilmemiş olması, veritabanı adı standart olarak ASPStatedir. Ve bağlantı cümlesi içinde başka bir veritabanı adı tanımlaması yapılmaz.

Benim örneğimde (local) sistemimdeki YM ismindeki SQL Server örneğine (instance) bağlantı yapılıyor. Login name olarak sa, şifre ise boş olarak veriliyor.

Not : Dediğimi yapın ama yaptığımı yapmayın! :) sa kullanıcısına (login name) boş parola vermeyin!

Cookie desteği olmadan nasıl InProc yapılandırma yapılır?

Mode özelliğine InProc verdikten sonra cookieless özelliği true yapılarak istenilen gerçekleştirilebilir.

Yukarıdaki resimde gözüktüğü gibi yapılan bir web.config tanımlamasında kullanıcının oturum bilgilerine ulaşım için kullanılan (session id) değer adres çubuğunda gözükmektedir. Bu şekilde eğer istemci bilgisayarda cookie desteği yoksa dahi session bilgileri ile çalışabilirsiniz.

NOT: Cookiless seçeneği InProc moda özgü bir özellik değildir. Diğer iki mod olan StateServer ve SQL Server ile de kullanılabilir. Cookielessin temel amacı cookie desteği kapalı olan yada hiç olmayan tarayıcılar kullanan kullanıcılarında session ile çalışan sayfaları başarı ile görüntüleyebilmesini sağlamaktır.

Web.config ile ilgili olan bu ikinci makale ile web.configde en çok işe yarayan ve kullanılan düğümleri inceledik. Umarım faydalı olmuştur.

Cengiz HAN
Microsoft ASP.NET MVP
cengiz@cengizhan.com