Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

ASP.NET Önbellekleme III (Programatic Caching)

Bazen sayfa üzerinde yaptığımız cache’lemenin fonksiyonelitisi yetmeyebilir ve cache’leme mekanizmamızı kodun içinden yönetmek isteyebiliriz. Kod tarafında cache’lemenin sayfa tarafındaki cach’leme ile bağı çok fazla olmasa da kod içinden bazı değerlere müdahale edebiliriz.

■  Response.Cache.setExpires  : Sayfanın ne kadar saniye cache’leneceğini söyler.
■  Response.Cache.setCacheability  : Bir enum değeri ister ; HttpCacheability . HttpCacheability.Public (Client veServer’da caching enable olur) ,  HttpCacheability.Server (Sadece Server’da caching enable olur).
■  Response.Cache.setvalidUntilExpires : true olduğu zaman sayfanın cache’lenmesi için bir süre verilmiş ise bu süre soruna kadar cache’leme expire olmaz.

Bazı sayfalar cache’leme için uygun değildir çünkü bazı kontrollerin dinamik olarak üretilmesi gerekebilir. Bütün dinamik oluşan kontroller için ayrı ayrı cache policy’ler uygulamak yerine substitution’ları kullanabiliriz. Asp.net 2 yöntem içerir.

■  Response.Writesubstitution  metodu :
■  Substitution control :

Bazen belli event’lere göre cache’i bozma ihtiyacı duyabiliriz. Örneğin bir sql sorgusu sonucuna göre.
Bunu yapabilmek için ASP.NET bir çok yöntem sunar. HttpValidationStatus ile bir sayfanın yeni mi generate edildiği yoksa cache’den mi alındığı bulunabilir.
HttpValidationStatus.Invalid : Bu sayfanın cache’inin bozulmasına ve tekrardan dinamik olarak generate edilmesine sebep olur.
HttpValidationStatus.IgnoreThisRequest :  Mevcut sayfanın bir önceki cache’lenmiş versiyonu bozulmadan yeniden generate edilmesini sağlar.
HttpValidationStatus.Valid : Cache’lenmiş sayfayı getirmesini sağlar.

Output Dependency

Response.AddCacheDependency : Cache’lenmiş response Cache Dependency nesnesine bağımlıdır.
Response.AddCacheItemDependency ve Response.AddCacheItemDependencies : Cache’lenmiş response bir veya daha çok nesneye bağımlıdır.
Response.AddFileDependency and Response.AddFileDependencies :  Cache’lenmiş response bir veya daha çok dosyaya bağımlıdır.

Buraya kadar her bir user control,sayfa,nesne üzerinden önbellekleme yapabileceğimiz gördük ve son olarak da bütün cache’leme işlemlerini web.config üzerinden merkezileştirebiliriz. Aşağıdaki örnek sadece server tarafında bir önbelleklemeyi 1 dk süre ile yapar ve browser tiplerine göre de farklı versiyonlarını tutar.

<outputCacheSettings>
  <outputCacheProfiles>
    <add name="ServerOnly" 
      duration="60" 
      varyByCustom="browser" 
      location="Server" />
  </outputCacheProfiles>
</outputCacheSettings>
Reklamlar

Kasım 30, 2011 Posted by | ASP.NET | , , , , , | Yorum bırakın

ASP.NET Önbellekleme II (Page Output Caching)

Bir web browser bir sayfayı getirdiğinde browser sayfanın bir kopyasını local bilgisayarda saklar. Tekrar aynı sayfaya istekte bulunulduğunda browser cache’lenmiş versiyonun valid olup olmadığını kontrol eder ve valid ise kullanıcıya sayfayı gösterir. Bu yöntem ile hem sayfanın kullanıcı tarafafında daha hızlı dolması sağlanır hem de server’a tekrardan istek gelmediği için sayfa tekrardan render edilmek zorunda kalmaz.Client-Side cache sayesinde eğer 1 kullanıcı sayfayı 100 kez çağırdığında sayfa 100 kez üretilir , fakat 100 farklı kullanıcı 1er kez sayfayı çağırırlarsa sayfa 100 kez üretilir.
Performansı artırmak için page rendering’i minimuma indirmemiz gerekiyor. Asp.net page output caching ile serverın belleğinde render edilmiş sayfayı saklayarak performansı ciddi oranda artırabiliriz.
Eğer sayfalarımızda kullanıcı bazlı dinamik veriler gösteriyorsak serdaki cache’de render edilen sayfayı bütün kullanıcılara göstermek olmaz bu yüzden ASP.NET’de partial – page – caching bulunmaktadır
ASP.NET ile her bir sayfayı ayrı ayrı cache’leyebilmek her sayfada bulunan @ OutputCache sayfa direktifi ile mümkündür. Bu direktifin yanına vereceğimiz parametreler ile çok çeşitli cacheleme teknikleri uygulayabiliriz.

Alıntı– CacheProfile: web.config içerisinde tanımlı olan Cache profillerinden birinin sayfaya uygulanılması istenilen durumda kullanılan niteliktir.
– DiskCacheable: Verilerin disk ve benzeri bir depolama cihazına alınıp alınamayacağını belirler.
– Duration: Önbelleğe alınacak sayfanın ne kadar süre ile bellekten okunacağını belirler. Saniye cinsinden rakamsal değer almaktadır.
– Location: Önbelleklenen verilerin nereye kaydedileceğini belirler. Varsayılan olarak Any değerini taşır. Bu değer verilerin istemci, proxy ve sunucuda taşınabildiğini belirtir. İstenirse sadece sunucuda, istemcide veya proxy’de saklanması sağlanabilir. Alabileceği diğer değerler; Client, Server, Downstream, ServerAndClient ve None’dir.
– NoStore: Sayfanın header (başlık) bilgilerinde “no cache” bilgisinin gönderilip gönderilmeyeceğini belirler.
– SqlDependency: Sayfanın SQL Server veritabanındaki bir tablonun değişimine bağımlı olarak önbelleklenmesi durumunda kullanılacak niteliktir. Bu özelliğe değer atayabilmek için, web.config dosyasındaki caching düğümünde bulunan sqlCacheDependency içerisine bir veritabanı tanımlaması yapılmalıdır.
– VaryByControl: Sayfadaki bir kontrolün değişimine göre önbellekleme işleminin yapılmasını sağlar. Değer olarak önbellekleme işleminin yapılmasını sağlayacak kontrolün ID değerini almalıdır.
– VaryByCustom: Farklı değerlere ve kriterlere göre önbellekleme işlemlerinin yapılması durumunda kullanılacak niteliktir. Bu niteliğin alacağı değerin yakalanıp ele alınabilmesi için Global.asax dosyası içerisindeki GetVaryByCustomString isimli metodun ezilmesi (override edilmesi) gerekmektedir.
– VaryByHeader: Sayfanın HTML kısmında yer alan header (başlık) bilgilerine göre önbellekleme işlemlerinin yapılmasını sağlar.
– VaryByParam: Sayfanın Url’den gelen QueryString parametrelerine göre önbelleğe alınıp alınmayacağını belirler. Varsayılan değeri None’dir ve parametreleri dikkate almaksızın sayfanın belleğe alınmasını sağlar. QueryString’deki herhangi bir parametrenin adını alarakta bu değere göre sayfanın farklı kopyalarının önbellekleğe alınabilmesini sağlar. Bu niteliğin her OutputCache direktifi içerisinde yazılması zorunludur.

Aşağıdaki örnek direktif ile query string’den gelen değer search veya category ise 15 sn cache’lenmesi sağlar eğer VarByPAram boş olsaydı hiç bir kritere bakmadan direk cache’leme yapacaktı.
<%@ OutputCache Duration="15" VaryByParam="search;category" %>

Aşağıda bir kontrole göre cacheleme yapılmıştır. Kontrollerin HTML isimlerine göre yapılıyor.
<select name=”ctl00$MainContent$ChoiceDropDownList” id=”MainContent_ChoiceDropDownList”>
<option value=”One”>One</option>
<option value=”Two”>Two</option>
<option value=”Three”>Three</option>
</select>
<input name=”ctl00$MainContent$UserNameTextBox” type=”text” id=”MainContent_UserNameTextBox” />

<%@ OutputCache Duration=”15″  VaryByParam=”ctl00$MainContent$ChoiceDropDownList;ctl00$MainContent$UserNameTextBox”%>

 

Partial-Page Caching : Bu cache’leme yöntemimiz ile cache’lemek istediğimiz sayfanın parçasını bir user control’e atıyoruz ve daha sonra user controlün @ OutputCache direktifine nasıl cache’leme yapmak istiyorsak ekliyoruz ve böylece bir sayfada birbirinden bağımsız user controlleri cache’leyebiliyoruz.

Kasım 29, 2011 Posted by | ASP.NET | , , , , , , | Yorum bırakın

ASP.NET Önbellekleme I (Application Caching)

Önbellekleme web sayfalarının sıkça erişeceği sayfanın tamamının veya belli bir datanın bellekte tutulmasıdır. Peki bunu neden yapıyoruz tabiî ki performans için. Bir datanın bellekten okunması veritabanından veya sabit diskten

okunmasından çok daha hızlıdır. Yalnız belleğe alınacak datanın iyi optimize edilmesi gerekir belleği şişirmemek için.

   ASP.NET’de 2 türlü caching metodu vardır.

– Application Caching(Data Caching) : Session gibi kullanılırlar, bir keyi vardır ve bu key ile bellekte saklanırlar. Null ontrolü yapılarak kullanılmaları daha iyi olur. Eğer değeri null ise cache boşalmış veya hiç atanmamış diyebiliriz.

if(Cache[“Key”]!=null) Cache[“Key”] = “Value”;

 Genellikle cache’de statik bir string değer tutulmaz,cache’de genellikle bir dosya,bir veritabanı sorgusu sonucu veya
elde edilmesi zor bir data cache’lenir. Kendi oluşturduğumuz bir tipi cache’leyebilmek için o sınıfın Serializable olması gerekir aksi datayı halde tekrar eski haline getiremeyiz.

Normal cache’e veri atama dışında insert metodu ile de bellekleme
yapabiliriz.Cache.Insert metodu işimize yarayacak bir sürü parametre barındırır.

key : cache nesnesinin anahtar kelimesi.

value : cache’e atadığımız değer.

dependencies : Bağımlılığı belirtir. Örneğin buraya bir dosyayı bağımlı yapar ve cache’e insert edersek daha sonra
dosya değiştirildiği zaman cache’de boşalır.

absoluteExpiration : Bu bir DateTime nesnesidir ve cache’in ne zaman boşalacağını belirtir. Bunu kullanmak istemez
iseniz  System.Web.Caching.Cache.NoAbsoluteExpiration ‘a set edilebilir.

slidingExpiration : Bu bir TimeSpan nesnesidir ve ne kadar süre sonra cache’in boşalacağını belirtir. Kullanmak istemez iseniz System.Web.Caching.Cache.NoSlidingExpiration olarak set edilebilir.

Priority : Cache’de hangi nesnelerin önce çıkarılacağını belirtir. High priority olanlar cache’den en önce çıkartılır.

onRemoveCallback : Cache’in boşaldığı anda tetiklenen bir handler’dır.

//Cache Dependency : a.txt dosyası değişince cache boşalır.
if (Cache[“Key”!= null) Cache[“Key”= “Value”;

Cache.Insert(“FileCache”,File.ReadAllText(“a.txt”),new System.Web.Caching.CacheDependency(Server.MapPath(“a.txt”)));

//Bir cache nesnesine birden fazla bağımlılık da tanımlanabilir.
System.Web.Caching.CacheDependency dep1 = new System.Web.Caching.CacheDependency(Server.MapPath(“1.txt”));
string[] keyDependencies = {“CacheItem1”};


System.Web.Caching.CacheDependency
dep2 = new System.Web.Caching.CacheDependency(null,keyDependencies);

System.Web.Caching.AggregateCacheDependency aggDep = new System.Web.Caching.AggregateCacheDependency();
aggDep.Add(dep1);
aggDep.Add(dep2);
Cache.Insert(“FileCache”,File.ReadAllText(“a.txt”),new System.Web.Caching.CacheDependency(Server.MapPath(“a.txt”)));

//Bir cache nesnesine absolute Expiration tanımlamak için: Bu durumda cache’e data atıldıktan 10 dk sonra kendiliğinden boşalır.


Cache.Insert(“FileCache”,“CacheContents”, null, DateTime.Now.AddMinutes(10), System.Web.Caching.Cache.NoSlidingExpiration);


//Eğer sık kullanılan nesneleri daha uzun süre cache’de tutmak istiyorsanız
sliding expiration kullanılmalı.



//Bu durumda en son gelen istekten sonra 10 dk
nesne cache’de tutulur.

Cache.Insert(“FileCache”,“CacheContents”, null,System.Web.Caching.Cache.NoAbsoluteExpiration,
new TimeSpan(0,10, 0));

Kasım 24, 2011 Posted by | ASP.NET | , , , , , | Yorum bırakın

The request failed with HTTP status 503: Service Unavailable.

GEçenlerde IIS 6.0 üzerinde bir çalışanbir web servisim için prod serverda yeni bir pool yaratıp poolunu değiştirelim dedik ve bu hatayı almaya başladık.
Bu hatayı aldığımız zaman ilk yapmamız gereken uygulamanın config dosyasını kontrol etmek ve config de yazan web servis url sinin pathi doğru veya servis ayakta mı kontol etmek gerekir.
Gennellik IIS 6.0 ve önceki versiyonlarından dönen bir hatadır.
Bu hatanın olma nedeni aşağıdakilerden biri olabilir
1- Service unavailable.
2- Çok fazla kullanıcı olduğu zaman;
3- Uygulama offline konuma geldiyse
4- Uygulama istek kuyruğu dolduysa
5- Administrator uygulamayı kapattıysa
6-Güvenlik policy’leri nedeniyle kapandıysa
7-Application pool kuyruğunda istek time-out’a uğradıysa.

http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/55f71614-ef1b-4015-b9c8-a42c1e700c25.mspx?mfr=true

Benim aldığım hata ise biraz daha spesifikmiş. Server Manager da (Configuration-Local Users and Groups – Groups) da bir gruba yeni oluşturulan application pool userını eklememiz gerekiyormuş yani yetkiyle ilgili bir sorun.

Kasım 23, 2011 Posted by | IIS | , , , | Yorum bırakın

ASP.NET Temalar (Themes)

   Örneğin bir B2B uygulamasında farklı müşterilere farklı logo ve tasarım verme durumunda kalabiliriz. Böyle
durumlarda temalar imdadımıza yetişir ve sadece tek bir dosya ile bu isteğimizi yerine getirebiliriz. Ayrıca sayfadaki kontrollere font,renk,nesne yerleşimleri gibi bir çok görsel özellik burada tanımlanabilir ve bütün sayfalardaki görsel
bütünlük sağlanabilir.

    Asp.net projemizde temaları <App_Themes> klasörü altına eklenir. Bu klasör temalar için kullanılan özel bir
klasördür. Web projemize sağ tıklayarak Add ASP.NET Folder diyerek bu klasörü projemize ekleyebiliriz. Daha sonra bu klasöre Add New Item diyerek Skin File eklenir.

    Bir sayfaya skin file’daki özellikleri uyglamak için @ Page direktiflerine Theme=”Blue” (Bu durumda temadaki
özellik baskındır ve kontrolde lokal olarak uygulanan özelliği ezer)

veya
StylesheetTheme
=”Green”
(Bu da tam tersi olarak kontrolde lokal olarak özellik eklenirse lokal özellik temayı ezer)yapılır.

 Bir skin file’ı bütün web projesine uygulamak istersek de web.config’e
<pages theme=red/> şeklinde ekleyebiliriz.

Bir sayfadaki temayı EnableTheming=”false” diyerek sayfa bazında iptal edilebilir.

Global temalar ise bir serverdaki bütün web sayfalarına uygulanmak üzere kullanılır. IIS üzerindeki web sayfalarına uygulanması için

<iis_default_root>\Aspnet_client\System_web\<version>\Themes

File sistem bazlı web uygulamaları için

%SystemRoot%\Microsoft.NET\Framework\<version>\ASP.NETClientFiles\Themes.

Visual Studio global temaları tanımaz , browserda web sayfası çalıştığı zaman
uygulanır.

Skin dosyası içerisinde aşağıdaki gibi asp.net kontrollere özellikler
verilebilir. SkinId verilmezse bütün projedeki kontrole özellikler eklenir.

<asp:Image runat=”server” ImageUrl=”~/images/image1.jpg”/>

 

<asp:GridView runat=”server” SkinId=”gridviewSkin” BackColor=”White” >

<AlternatingRowStyle BackColor=”Blue” />

</asp:GridView>

Temanın bulunduğu klasöre css dosyaları da ekleyerek html elementlere style’lar
eklenebilir. Css’ler ASP.NET’e özgü değildir bütün web sitelerinde
kullanılabilir.

body
 {text-align:center;

font-family:Arial; 

font-size:10pt;}

.footer

 {margin:20px

0px 20px
0px;
}

Programatik olarak temayı değiştirmek için sayfanın Page_PreInit metodunda  Page.Theme = “blue” diyerek
değiştirilebilir. Herhangi bir kontrolün temasını değiştirmek için de yine aynı şekilde control1.SkinID=”blue” yaparak uygulanabilir.

Kasım 20, 2011 Posted by | ASP.NET | , , , , | 1 Yorum

ASP.NET Master Page

       ASP.NET ile ilişkisi olan herkes master page kavramını duymuştur.Master page’e en genel tabiliriyle bütün diğer saylara uygulanan bir şablon diyebiliriz.Master page’ler sayesinde  windows uygulamalarındaki gibi menüler oluşturabilir ve bütün sayfalara bu şablonu ekstra kod yazmadan ekleyebiliriz.Master page ile bütün sayfalar için genel bir yapı oluşturabiliriz ve siteye giren kullanıcı rahatlıkla istediği sayfaya kaybolmadan ulaşabilir. Bütün sayfalar tek bir master page kullandığı için genel şablonda yapılan değişiklik bütün sayfalarda aynı anda görülebilir. Master page’ler ile kodun bakımı ve geliştirmesi de çok kolaylaşmıştır.
Projemize master page eklemek için Add New Item dialog kutusunda Master page seçilir ve projemize .master uzantılı bir dosya oluşturulur.Normal web page’lerden farklı MasterPage sınıfından türemiş olmasıdır ve .master dosyası içinde @Page yerine @Master page direktifi ekli olarak gelir.

<%@Master Language=”C#” AutoEventWireup=”true” CodeFile=”Site.master.cs”
Inherits=”SiteMaster” %>

Content page master page’den kalıtım alan sayfadır.

<%@Page Title=”Home Page” Language=”C#” MasterPageFile=”~/Site.master”AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>
Bir content sayfası çağrıldında ve sayfa getirildiğinde @ Page direktifi okunur ve bu direktif bir master page’e referans gösteriyorsa master page de getirilir. Eğer ilk kez çağrılıyorlarsa ikisi de compile edilirler. Daha sonra Master page de bulunan ContentPlaceHolder kontrolü ile content birleştirilir(merge).Bir master
page’de birden fazla ContentPlaceHolder bulunabilir ve farklı içerikler bu kontrollere eklenebilir.

*** Genellikle Master page ler content page ‘lere genellikle bir etkisi olmaz. Ancak örneğin Content page’deki EnableViewState=true ve Master page’deki EnableViewState=false yapılırsa burada Master page daha baskındır ve sayfanın
view state’ini kapatır.

*** Bütün content saylarında ihtiyaç duyulan bir değeri Master Page’de public bir property yapıp content sayfasına MasterType direktifini ekleyerek content sayfasından erişebiliriz.

<%@MasterType VirtualPath=”~/Site.master” %>

Property’lerin dışında master page’deki kontrollere de content sayfasından erişilebilir.
Label l = (Label)Master.FindControl(“Label1”);


Nested Master Page
: Bazı durumlarda içice master page kullanma ihtiyacı duyabiliriz. Örneğin logosu ve
üst yazısı aynı fakat menüleri farklı sayfalar oluşturumamız gerektiği
durumlarda master page leri iç içe tanımlayabiliriz.

<%@Master Language=”C#” MasterPageFile=”~/Site.master” AutoEventWireup=”true”
CodeFile=”MasterPage.master.cs” Inherits=”MasterPage” %>

Master page’leri dinamik olarak da kod ile run time da değiştirmemiz mümkün.

void Page_PreInit(Object
sender, EventArgs e){

if (Session[“masterpage”]
!= null)

MasterPageFile = (string)Session[“masterpage”];

}

Kasım 19, 2011 Posted by | ASP.NET | , , , , | Yorum bırakın

IIS’de gelen istekleri görüntülemek

Merhabalar.

Asp.net ile bir uygulama geliştirip bunu iis de publish ettiğimiz zaman, buraya istek gelen istekleri (request) anlık olarak görüntülemek isteyebiliriz. IIS’imize gelen istekler ya post tur ya da get tir.

Web sayfasını ilk çağırıken yapılan istek GET’tir, sayfa açıldıktan sonra bir butona tıklanması gibi eventlere ise POST’dur. Bu iletişimlerin hepsini IIS üzerinden anlık olarak izleyebiliriz. Aşağıdaki örnek IIS 7 içindir.

1. IIS manager’ı açın. Başlat->Çalıştır-> inetmgr

2. Soldaki Connections pencesindeki tree’de SERVER isminin yazdığı node’a tıklanır

3. Sağda çıkan pencerede Worker Process tıklanır

4. Hangi application pool’u izlemek istiyorsanız ona sağ tıklayıp View Current Requests’i tıklayın.

5. Daha sonra gelen bütün istekleri liste halinde görebilirsiniz.

Gerçek Hayattan bir örnek : Bir uygulama yazıp benim yetkim dahilinde olmayan bir ortama publish ettirmiştim.Fakat test eden arkadaşlar uygulamanın çalışmadığını söylediler. Kendi bilgisayarımdan uygulama çalışıyordu.  Requestin iis’e ulaşmadığı hiç aklıma gelmemişti. IIS de worker process’leri izleyerek requestin IIS’e hiç ulaşmadığını farkettim. Test yapan arkadaşın host dosyasında verdiğimiz URL başka bir ip ye yönleniyormuş.

C:WindowsSystem32driversetchosts bu dizindeki host dosyası ile domain isimlerinin hangi ip’ye yönleneceğini değiştirebiliyoruz.(Örn:192.xx.xx.xx testserver)



 

 

 

 

 

 

 

Detaylı bilgiyi aşağıdaki adresten edinebilirsiniz.

http://technet.microsoft.com/en-us/library/cc732518%28WS.10%29.aspx

 

 

Kasım 17, 2011 Posted by | IIS | , , , | Yorum bırakın

ASP.NET Web İletişimini Anlamak

ASP.NET ile kodlama yaparken bir çok programcı geri planda ne iş yapıldığından habersiz kodlama yapıyor. Bu makalemizde ASP.NET’in kendini biraz daha derinlerine dalış yapacağız.

Client-Server uygulamalarında temel olarak 2 bileşen vardır.

* Client(Front-End Interface) : Web browser’lar burada arayüz olarak kabul edilir ve kullanıcı inputlarını alır ve servera işlenmesi için gönderilirler

* Server(Back-End) : Web serverlar client’tan gelen istekleri işleyerek bir HTML sayfa oluşturur ve bu cevabı client’a döner.

Server ile Client aralarındaki iletişimi HTTP(Hypertext Transfer Protocol) ile sağlar , bu protokol tex bazlı bir ağ protokolüdür ve  TCP 80 portuna atanmıştır. Eğer serverda bir sertifika yüklü kurulu ise bu sefer client ve server iletişim için HTTPS protokolünü kullanır ve TCP 443 üncü portuna atanmıştır.

Server ile Client arasındaki iletişim aşağıdaki adımları takip eder.

1- Kullanıcı browsera adresi girer. http://koraykirdinli.blogcu.com

2- Web browser server’a HTTP protokolü ile başlanır ve GET REQUEST ’i gönderir.

3- Web server istek yapılan sayfayı işletir. Bu olay sonunda web server bir statik html sayfa , bir resim dosyası döndürebilir veya asp.net kodu çalıştırabilir.

4- Web server cevap(RESPONSE) dönmek için yine HTTP protokolünü kullanır. Eğer istek başarılı bir şekilde process edilirse(işlenirse) HTTP Status Code 200 döner. Eğer server sayfayı bulamazsa HTTP Status Code : 404 döner , Sayfanın yeri değiştiyse veya zaman aşımına uğramışsa HTTP 302 döner.

5- Web browser serverdan gelen cevabı HTML sayfa olarak gösterir.

Bu 5 step her bir kullanıcı tıklamasında veya sayfa çağrıldığında tekrarlanır.

Gelişmiş web serverın statik html sayfaları ve resim dosyalarını göstermekten çok daha öte rolleri vardır:

– Gelen isteğin doğrulamak ve doğru olmayan istekleri reddetmek

– Server ve Client arasında SSL(Secure Socket Layer) ile authenticate etmek

– Kullanıcıyı authorize etmek yani erişim yetkisi olan sayfalara izin vermek

– İsteği nasıl handle edeceğini belirlemek.

– Hataları handle etmek

– Çıktıları cache’leyebilmek

– Çıktıyı sıkıştırmak

– Erişimleri loglamak

Request Örneği:

GET /default.aspx HTTP/1.1

Host: www.websitesi.com

HTTP Methodu Açıklama
GET Bir nesne getirir,örneğin web sayfası. GET /test.htm
POST Web server’a işlenmesi için data yollar.Örneğin formadaki Submit butonu ile.
HEAD Sayfayı download etmeden meta bilgisini getirir.
OPTIONS Web Server’da desteklenen komutları listeler
PUT Client’a belirtilen URL de bir resource create etmesine izin verir.
DELETE Web server’da yetkisi varsa bir resource’u siler.
TRACE Test veya dinleme için
CONNECT Dinamik olarak tünel değiştirmek için proxy ile birlikte kullanılır.
DEBUG ASP.NET debugging i başlatır.

Response Örneği

HTTP/1.1 200 OK

Server: Microsoft-IIS/6.0

Content-Type: text/html

Content-Length: 38

Merhaba



***Bütün http status code’larını ezbere bilmesek dahi aşağıdaki 5 grubu bilmek faydalı olacaktır.

STATUS

CODE

GRUBU

AÇIKLAMA

1xx Bilgi Amaçlıdır: İstek alınmış ve server işlemeye devam ediyor.(100:Continue)
2xx Başarılı :Aksiyon başarılı bir şekilde alınmış,anlaşılmış ve kabul edilmiştir.(200:OK,201:Created)
3xx Redirect komutu : Client başka bir resource’a erişmeye çalışmalıdır.(302:Found)
4xx Client Error:Requestte syntax hatası var veya server requeste nasıl cevap vereceğini bilmiyor.(400:BadRequest)
5xx Server Error : Server geçerli görünen requesti karşılamaya çalışırken başarısız olmuş.(500:Internal Server Error)

Kasım 14, 2011 Posted by | ASP.NET | , , , , | Yorum bırakın

İkinci el araç alırken dikkat!!!

Merhabalar ,
Bloğuma her zaman yazılımla ilgili konular yüklüyordum ancak bazen de başıma gelen olayları kısaca paylaşmak ve edindiğim tecrübeleri aktarmak istiyorum.

Geçen sene Ford Fiesta marka bir araç almıştım ikinci el, aracı tanıdık olduğu için ne bir servise götürdük ne de kontrol ettik. Ancak araç alırken kimden alırsanız alın iyice kontrol ettirmek gerekiyor çünkü aracım pert çıktı resmen 17500 TL lik arabaya 2 yıl önce 13000 tl lik masraf yapılmış.

Olay şöyle gelişti ben aracı aldım ve SBN sigortadan kasko yaptırdım ve hiç bir hasar kaydı çıkmadı. Daha sonra aracı sattığım kişi Neova sigortadan kasko yaptırmak istedi ve bu hasardan dolayı kasko yapamayız dedi. Yani demek istediğim ikinci el bir araç alacaksak eğer bir kaç kasko şirketinden fiyat almakta fayfa var.

Diğer bir husus da araç hasar sorgulama : 5664 ‘e HASAR M MotorNumarası gönderirseniz o motor numarasına ait bütün hasarları gösteriyor veya HASAR S SaseNumarası. İki türlü de aratmakta fayda var. Plaka ile sorgulama çok da işe yaramıyor.

Eğer aracın büyük hasarı var ve kasko ile değil de özel bir servis de yaptırıldıysa bu sefer sms ile sorgulatma da işe yaramıyor. Araç yukarda anlattığım bütün testlerden geçerse bu sefer yetkili serviste de servis ücretini ödeyip baktırmak faydalı olur bence.

Ben bizzat yaşadım ve aracımı satarken oldukça zarar ettim ve paylaşmak istedim.

Kasım 13, 2011 Posted by | Güncel-Genel | , , , , | Yorum bırakın

Page.UICulture ve Page.Culture

Merhaba arkadaşlar, bu yazıda öncelikle başlıkta belirttiğim iki kavram arasındaki farkı açıklamaya çalışacağım. Page.Culture : kültüre bağlı işlemler için kullanılır. Örneğin tarih,sayılar,parasal formatlar vs. Örneğin Page.Culture’ı Türkçe’ye set ederseniz artık tarih formatı dd/MM/YYYY ve parasal ifadelerin sonuna TL gelir vs.  UICulture ise sayfaya hangi resource dosyası yüklenecek bununla ilgilenir. Örneğin Default.aspx sayfanız için UICulture Türkçe seçilirse Default.aspx.tr-TR.resx resource dosyası sayfaya yüklenecektir.

UICulture ve Culture’ı web.config dosyasından global olarak set edebiliriz.

< globalizationuiculture=”tr”culture=”tr-TR” />

Ya da her sayfada page direktifi ile ayrı ayrı set edilebilir

<% @PageUICulture=”tr”Culture=”tr-TR” %>

Son olarak da bunu kod yazarak set edebiliriz.Ancak burada dikkat etmemiz gereken nokta komutun page life cycle’da uygun yerde çağırılması. Bunun için özelleşen InitializeCulture metodunu override ederek kullanabiliriz. Aşağıdaki örnekte bir dropdownlistte diller listeleniyor ve her değiştiğinde sayfanın da dilinin değişmesini bekliyoruz. Burada dikkat etmemiz gereken diğer bir nokta ise ddlLanguage nesnesine direk SelectedValue diyerek erişemememiz çünkü InitializeCulture metodu page life cycle’da nesneler yaratılmadan önce çağrılıyor ve bizde bu değeri Request.Form collection’ının içinden okuyoruz.

ASPX

CS

protected override void InitializeCulture(){

        if (Request.Form[“ddlLanguage”] != null)
        {
            String selectedLanguage = Request.Form[“ddlLanguage”];
            UICulture = selectedLanguage;
            Culture = selectedLanguage;
            Thread.CurrentThread.CurrentCulture =
                CultureInfo.CreateSpecificCulture(selectedLanguage);
            Thread.CurrentThread.CurrentUICulture = new
                CultureInfo(selectedLanguage);
        }
        base.InitializeCulture();
    }

ASP.NET page life cycle da InitializeCulture metodunun yeri

1.    Construct

2.    ProcessRequest

3.    FrameworkInitialize

4.    InitializeCulture

5.    If child controls are present

1.    AddParsedSubObject

2.    CreateControlCollection

3.    AddedControl

4.    ResolveAdapter

6.    DeterminePostBackMode

7.    OnPreInit

8.    OnInit

9.    TrackViewState

10.  OnInitComplete

11.  OnPreLoad

12.  OnLoad

13.  OnLoadComplete

14.  EnsureChildControls

1.    CreateChildControls

15.  OnPreRender

16.  OnPreRenderComplete

17.  SaveViewState

18.  OnSaveStateComplete

19.  CreateHtmlTextWriter

20.  RenderControl

21.  Render

1.    RenderChildren

2.    VerifyRenderingInServerForm

22.  OnUnload

23.  Dispose

Kasım 2, 2011 Posted by | ASP.NET | , , , | Yorum bırakın