Öne Çıkan Yayın

Uzak Masaüstü Bağlantısı ve Modem Port Ayarı

İyi günler bu konumuzda uzak masaüstü bağlantısı ve modem port ayarını anlatacağım. Normalde uzak masaüstü bağlantısı ayarını açtığımızda ye...

15 Kasım 2012 Perşembe

ASP.NET Yapılandırma ve Web.Config

ASPNET’in en güzel yanlarından biri güçlü yapılandırma sistemidir. Bu yapılandırma sistemi XML tabanlı dosyalar kullanır ve Web.Config adlı dosyada saklanır. Bir ASP.NET uygulamasına herhangi bir Web.config dosyası eklenmediğinde varsayılan olarak, Microsoft Framework ile gelen Machine.config dosyasından yapılandırmayı kalıtımla alır. Lakin bu hiçbir zaman yeterli değildir. Zaten Visual Studio.NET’de Visual Web 2005 de bizim için kendileri temel yapılandırmalara sahip birer Web.config dosyası oluşturuyor. 

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>
Yukardaki Web.config dosyası tam ve eksiksiz değildir. Sadece şeklen ilk bakış olsun istedim. Şimdi yukarıdaki ve yukarıda geçmeyen diğer yapılandırmaları tek tek inceleyelim.

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ı"
( başka öznitelikler de var ama sadece bir kısmı kullanıldı )

  • 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
      a. extension: Geri kod sayfası dediğimiz sayfasının uzantısının belirlendiği alandır (.vb, .cs, gibi) bu alan zaten bundan önce gelen langue denetimi ile özdeş olur Visual Studio ve/veya diğer yazılım geliştirme araçları bizim için bu ayarı da otomatik olarak yaparlar. 
       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>
       a. <add assembly: Bir montajı derleme sırasında başvurulmak üzere adına göre belirler. Önbellekteki tüm geçerli montajları almak için"*" karakteri kullanilabilir. 
       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.

Hiç yorum yok:

Yorum Gönder