Koray Kırdinli

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

Could not load file or assembly hatası

“Could not load file or assembly ‘xxxxxx, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))”

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

——————————————————————————–

Bu hatanın sebebi bazen gerçekten ilgili dll ‘in olmaması olabileceği gibi cachelerde veya temp dosyalarda artıklar kalmasından da kaynaklanabilir.

İlk yapmanız gereken C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\ altındaki dosyaları uçurup, komut satırından “iisreset” yapmak olsun ki boş yere uğraşmayın.

Reklamlar

Nisan 12, 2013 Posted by | ASP.NET, İpucu | , , , | 4 Yorum

Sayfaya dinamik olarak Google Maps Key Scripti eklemek

Asp.net projelerinde google maps de bir yeri işaretlemek için google’ın vermiş olduğu key scriptini dinamik olarak sayfamızın tagları arasına eklemek istersek sayfanın OnPreRender metoduna aşağıdaki kodu yazabiliriz.
Tabi aşağıdaki kod yardımı ile herhangi bir scripti sayfanıza ekleyebilirsiniz. Google maps scriptini seçmemin asıl nedeni Test ve prod ortamlarında farklı key ler kullanıldığı için buna sıkça ihtiyaç duyacağımızdan mütevellit :)
Umarım yardımcı olur.

 
protected override void OnPreRender(EventArgs e)
    {
        string googleMapsKey = ConfigurationManager.AppSettings["GoogleMapsKey"].ToString();
        HtmlGenericControl jsFile = new HtmlGenericControl("script");
        jsFile.Attributes.Add("src", String.Format("http://maps.google.com/maps?file=api&v=2&sensor=true&key=" + googleMapsKey));
        Page.Header.Controls.Add(jsFile);
    }

Kasım 8, 2012 Posted by | ASP.NET | , , , | 1 Yorum

Validation of viewstate MAC failed hatasının çözümü

Merhabalar, asp.net de bir sayfadan diğerine bir data post etmeyee çalışırken aşağıdaki hata ile karşılaşırsanız çözümü çok basit. Data post ettiğiniz sayfanın sayfa direktiflerine enableViewStateMac=”false” ekliyorsunuz.

<%@ Page Language=”C#” AutoEventWireup=”true”  enableViewStateMac=”false”  CodeBehind=”Success.aspx.cs” Inherits=”KT_Virtual_POS_App.Success” %>

 

Server Error in ‘/’ Application.


Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

 

<form id=”form1″ action=”Success.aspx” method=”post” runat=”server”>

Eylül 5, 2012 Posted by | ASP.NET | , , , , | Yorum bırakın

Servise XML Data post etmek

string requestLoginXml = “<?xml version=\”1.0\” encoding=\”utf-8\” ?>\n<xxx><yyy>1.0</yyyy></xxx>”;

WebClient client = new WebClient();
byte[] loginBytes = client.UploadValues(“Web service URL”, “POST”, new NameValueCollection { { “data”, requestLoginXml } });
string responseLoginXml = Encoding.UTF8.GetString(loginBytes);

XmlDocument xml = new XmlDocument();
xml.LoadXml(responseLoginXml);
XmlNodeList xmlList = xml.SelectNodes(“/ELEMENT”);

string result = xmlList[0][“ELEMENT_NODE”].InnerText;

Ağustos 9, 2012 Posted by | ASP.NET, C# | , , | Yorum bırakın

Http Web Request ile bir web servis metodunu çağırmak

Merhabalar, bazen asp.net uygulamaları geliştirirken web servisleri proxy sınıfları kullanmadan çağırma ihtiyacı duyabiliriz. İlgili metodu ilgili parametrelerle çağırabiliriz.

ÇAĞRILACAK WEB SERVİS KODU

[WebService(Namespace = “http://tempuri.org/&#8221;)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]

public string GetData(int a)
{
return “Merhaba koray ::::::::::::::: ” + a.ToString();
}
}

ASP.NET ÜZERİNDEN ÇAĞIRMA ve SONUCU ALMA KODU

HttpWebRequest request;
Uri uri = new Uri(“http://localhost:50854/Service1.asmx/GetData?a=5&#8221;);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = “GET”;
string result = string.Empty;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
result = streamReader.ReadToEnd();

Buradaki sonuç browserda ne geliyorsa aynen sonuç stringi içerisine yazılacaktır.

<?xml version=”1.0″ encoding=”utf-8″ ?>
  <string xmlns=”http://tempuri.org/“>Merhaba koray ::::::::::::::: 444</string>
Ayrıca dönen response nesnesi içerisinde HTTP Status Code ları da döner.

Temmuz 5, 2012 Posted by | ASP.NET | , , , , | Yorum bırakın

ASP.NET ile Dynamic Data Web Sitesi Yapılması

Merhaba arkadaşlar,

Bu yazımızda Framework 3.5 SP1 ile gelen Dynamic Data Web Site’lardan bahsedeceğiz. Öncelikle ben sitenin bütün tasarımını kendim yapmak isteyenlerdenim. Herhangi bir şablon kullanmaya pek sıcak bakmazdım ancak Dynamic Data bazı durumlarda işimizi inanılmaz kolaylaştırmaktadır. Örneğin sadece veri güncelleme,silme,ekleme,görüntüleme üzerine küçük bir intranet uygulama yapacaksanız hiç düşünmeden bu şablondan faydalanabilirsiniz. Custom düzenlemelere ihtiyacınız yok ise 2 dk da web siteniz hazır. Önce kısaca nasıl basit bir site yapacağımıza bakalım.

File->New->Project diyoruz ve çıkan diyalog penceresinde ASP.NET Dynamic Data Linq to SQL Web Application’ı seçiyoruz.

Bunu yaptıktan sonra zaten VS bize bir şablon proje oluşturuyor. Daha sonra Add New Item diyerek Data sekmesi altındaki LinqToSQL  Class seçiyoruz. Bunu eklememizin sebebi de veritabanına bağlantı sağlayabilmek. .dbml uzantılı sınıfı projemize ekledikten sonra Server Explorer’dan ilgili veritabanına bağlantı kurarak , ilgili db nesnelerini sınıfa ekliyoruz. Ben linq to SQL sınıfımın ismini DB olarak verdim ve geri planda DBDataContext isminde bir sınıf oluşturdu benim için.

DB.dbml yi ekledikten sonra global.asax’da aşağıdaki gibi ayarlamamız gerekiyor.

public class Global : System.Web.HttpApplication

{

private static MetaModel s_defaultModel = new MetaModel();

public static MetaModel DefaultModel

{

get

{

return s_defaultModel;

}

}

public static void RegisterRoutes(RouteCollection routes)

{

DefaultModel.RegisterContext(typeof(DBDataContext), new ContextConfiguration() { ScaffoldAllTables = true });

routes.Add(new DynamicDataRoute("{table}/{action}.aspx")

{

Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),

Model = DefaultModel

});

// The following statements support combined-page mode, where the List, Detail, Insert, and

// Update tasks are performed by using the same page. To enable this mode, uncomment the

// following routes and comment out the route definition in the separate-page mode section above.

//routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {

//    Action = PageAction.List,

//    ViewName = "ListDetails",

//    Model = DefaultModel

//});

//routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {

//    Action = PageAction.Details,

//    ViewName = "ListDetails",

//    Model = DefaultModel

//});

}

void Application_Start(object sender, EventArgs e)

{

RegisterRoutes(RouteTable.Routes);

}

}

Sonuç olarak bütün seçtiğimiz tablolar üzerinde Edit,Insert,Delete ve Select yapabileceğiniz çok basit anlamda bir web sitesini dakikalar içerisinde yapmış oluyoruz. Tabi ki site üzerinde uyarlamalar yapmamız gerekecektir , bazı alanların görünmesini engellemek veya bazı yazıları değiştirmek vs.vs. Bunlara ilerki makalelerimizde değiniriz inşallah. Umarım faydalı olmuştur.
Herkese iyi çalışmalar dilerim.

Nisan 9, 2012 Posted by | ASP.NET | , , , , , , , | 1 Yorum

ASP.NET ImageMap ile HotSpot

ImageMap kontrolü ile Web sayfanıza eklediğiniz bir resmin farklı noktalarına
HotSpot belirleyerek farklı aksiyonlar aldırabilirsiniz. HTML çıktısı  şu şekilde <img usemap=”#myMap”>

Belki bir yerde işinize yarar.

public partial class HotSpotControl : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ImageMapStopLight.ImageUrl = “~/images/stoplight.jpg”;
ImageMapStopLight.AlternateText = “Stoplight picture”;
ImageMapStopLight.HotSpotMode = HotSpotMode.PostBack;

RectangleHotSpot redHotSpot = new RectangleHotSpot();
redHotSpot.Top = 0;
redHotSpot.Bottom = 40;
redHotSpot.Left = 0;
redHotSpot.Right = 40;
redHotSpot.PostBackValue = “RED”;
ImageMapStopLight.HotSpots.Add(redHotSpot);

RectangleHotSpot yellowHotSpot = new RectangleHotSpot();
yellowHotSpot.Top = 41;
yellowHotSpot.Bottom = 80;
yellowHotSpot.Left = 0;
yellowHotSpot.Right = 40;
yellowHotSpot.PostBackValue = “YELLOW”;
ImageMapStopLight.HotSpots.Add(yellowHotSpot);

RectangleHotSpot greenHotSpot = new RectangleHotSpot();
greenHotSpot.Top = 81;
greenHotSpot.Bottom = 120;
greenHotSpot.Left = 0;
greenHotSpot.Right = 40;
greenHotSpot.PostBackValue = “GREEN”;
ImageMapStopLight.HotSpots.Add(greenHotSpot);

}
protected void ImageMapStopLight_Click(object sender, ImageMapEventArgs e)
{
Label1.Text = string.Format(“You clicked the {0} rectangle.”, e.PostBackValue);
}
}

Ocak 13, 2012 Posted by | ASP.NET | , , | Yorum bırakın

ASP.NET Client-Side Durum Yönetimi

Web sayfanız binlerce kullanıcıya hitap ediyorsa, client tarafında mutlaka uygulama state’lerini saklamaya kesinlikle ihtiyaç

duyarsınız. Client tarafında veri saklamanın farklı teknikleri mevcuttur.

View State : Client tarafında veriyi hashlenmiş şekilde saklamak için kullanılır.
Aşağıdaki config değeri default olarak always’tir.
<configuration>
<system.web>
<pages viewStateEncryptionMode=”Always”/>
</system.web>
</configuration>

EnableVireState özelliği ile bir sayfadaki tüm kontrollerin viewstate’ini açıp kapatabiliriz.
ViewStateMode(Framework 4.0 ile geldi) : EnableViewState=true ise bu property devreye girer. Default olarak “Inherit”dir ve

kontrollere sayfanın viewstate’ini miras almasını sağlar.

*Örneğin bir sayfanın view state’ini disable edip,spesifik bir kontrolün viewstate’ini açmak isterseniz.

Page.EnableViewState=”True”, Page.ViewStateMode=’Disabled’, Control.EnableViewState=”True”, Control.ViewStateMode=”Enabled”

yapmanız gerekir.

*Viewstate sayfada sıkıştırılmış olarak saklanmaz. Eğer web server’ınızda GZip ile dinamik Http compression(sıkıştırma)’ını

enable ederseniz bütün sayfalarda viewstate sıkıştırılmış olacaktır. Eğer sıkıştırma işleminin bütün web sitenizde geçerli

olmasını istemiyorsanız sayfaların Page.SavePageStateToPersistenceMedium ve Page.LoadPageStateFromPersistenceMedium metodlarını

override edebilirsiniz. Bu metodlar viewstate’in serialize ve deserialize metodlarıdır.

*Bunların dışında viewstate’e custom veri de yazıp geri okuyabiliriz.
this.ViewState.Add(“MyData”, “some data value”);
string myData = (string)ViewState[“MyData”];

Control State : Spesifik bir Custom kontrolde bilgi saklamak için kullanılır. Temelde viewstate ile aynı işlevi görür. Control

state’i bir web kontrolümde kullanabilmek için OnInit metodunu override etmelisiniz. Sayfanın Page.RegisterRequiresControlState

metodunu çağırıp,kontrolü bu metoda geçirmelisiniz.

Hidden Fields : Viewstate gibi sayfa üzerinde veri saklamaya yarar ancak şifreleme,sıkıştırma, hashleme vs. özellikleri

yoktur.Bu kontrolü toolbox’tan sürükleyip sayfaya ekleyebilirsiniz.Kullanıcı arayüzünde görünmez.
Cookies : Client makinada text file olarak bazı bilgileri saklamaya yarar. Siz cookie expire time’ı ne kadar uzun verirseniz

verin kullanıcı bilgisayarındaki bütün cookie’leri silebilir.

Cookie yazma : Response.Cookies.Add(New HttpCookie(“userId”, userId))
Cookie okuma : Request.Cookies(“userId”).Value

// Check if cookie exists, and display it if it does
if (Request.Cookies[“lastVisit”] != null)
// Encode the cookie in case the cookie contains client-side script
Label1.Text = Server.HtmlEncode(Request.Cookies[“lastVisit”].Value);
else
Label1.Text = “No value defined”;

// Define the cookie for the next visit
Response.Cookies[“lastVisit”].Value = DateTime.Now.ToString();
Response.Cookies[“lastVisit”].Expires = DateTime.Now.AddDays(1);

Cookie scope’unu belirlemek için directory verilebilir.
Response.Cookies[“lastVisit”].Path = “/MyApplication”;
Cookie boyutu kullanılan browser’a bağlıdır. Her bir cookie max 4KB olabilir ve bir sitede 20 cookie olabilir.

Aşağıdaki şekilde de cookie’ler kullanılabilir.
Response.Cookies[“info”][“visit”] = DateTime.Now.ToString();
Response.Cookies[“info”][“firstName”] = “Tony”;
Response.Cookies[“info”][“border”] = “blue”;
Response.Cookies[“info”].Expires = DateTime.Now.AddDays(1);
//(visit=4/5/2006 2:35:18 PM)  (firstName=Tony)  (border=blue)

Query Strings : Requestte bulunulan sayfanın url’ine eklenen veri taşıma yöntemidir. ? işaretinden sonraki kısımda key,value

olarak yazılır.
Buradan gelen değer mutlaka kontrol edilmelidir çünkü hataya açıktır. Çoğu browser 2083 karakter sınırı vardır.
http://support.microsoft.com/Default.aspx?kbid=315233

Label1.Text = string.Format(“User: {0}, Lang: {1}, Page: {2}”,
Server.HtmlEncode(Request.QueryString[“user”]),
Server.HtmlEncode(Request.QueryString[“lang”]));

Ocak 10, 2012 Posted by | ASP.NET | , , , , , | Yorum bırakın

ASP.NET Sayfa Yaşam Döngüsü (Page Life Cycle)

Piyasada çok fazla ASP.NET programlayan developer olsa da gerçek manada ASP.NET yaşam döngüsünü bilerek event’leri bilinçli kullananların sayısı oldukça azdır. Bu makalemde ASP.NET yaşam döngüsüne kısa bir giriş yapmış olacağız.
Web uygulamalarını windows uygulamalarından ayıran temel olarak kullanıcı arayüzü değil , sayfanın yaşam döngüsüdür. Bir windows uygulamasını açarsınız üzerinde saatlerce çalışıp kapatırsınız ancak web uygulamaları böyle değildir. Web istekleri çok daha kısa sürelidir. Bir kullanıcı web sitenize girdiğinde herbir isteği servera gönderir ve server bu isteği işleterek cevabı client’a gönderir. Bu kısa bilgi alış verişi her istekte tekrarlanır.
ASP.NET kendi yaşam döngüsü içerisinde her bir stage de önemli eventler gerçekleştirir. Eğer bir kontrolü  dinamik olarak sayfaya ekleyecek olursak bu ekleme işlemini sayfanın yaşam döngüsü içerisinde doğru adımda yapmalıyız , aksi taktirde temalar vs yüklenmeyebilir. Sayfa render olduktan sonra yaratılan bütün nesneler yokedilir.
ASP.NET de bir requestten diğerine veri taşıyabilmenin 4 yolu vardır. Bunlar;
View State,Hidden Fields,Session State,Cookies
Her birinin temelde amacı veri taımak olsa da farklı durumlarda ihtiyaca göre kullanılmaktadır.
ASP.NET de her bir sayfanın ve üzerlerindeki kontrollerin birer yaşam döngüsü bulunmaktadır ve bu döngünün her bir adımında ASP.NET eventler fırlatmaktadır. Her bir adımda kod yazarak sayfa ve kontrollerin davranışlarını değiştirmek mümkündür.
Sayfa yaşam döngüsü uygulama sunucusunun uygulamanızı ne zaman start stop edeceğini , diğer uygulamalardan nasıl izole edeceğini ve kodunuzu nasıl execute edeceğinizi belirler.
ASP.NET uygulamaları genellikle bir web server üzerinde koşar ve bu web server genellikle IIS (Internet Information Service)’dir.
Süreç aşağıdaki gibi işler :
1- Web sitenize istek ilk defa ulaşır.
2- İstek Processing Pipeline’a yönlendirilir ve Processing pipeline bunu ASP.NET runtime’a forward eder.
3-ASP.NET ApplicationManager sınıfının bir instance’ını create eder ve bu sınıf isteğin .NET Framework tarafından execute edileceğini belirler.Application Domain global değişkenlerinizin diğer uygulamalardan izole edilmesini sağlar.
4- Application Domain yaratıldıktan sonra HostingEnviroment sınıfı yaratılır. Bu sınıf host edilen itemlara erişim sağlar , örneğin dizin dosyları.
5-ASP.NET isteği işleyecek çekirdek sınıfların birer nesnesini oluşturur.  HttpContext,HttpRequest,HttpResponse
6-ASP.NET HttpApplication sınıfını yaratır.Bu sınıf Global.asax dosyasının base sınıfıdır.
7-Son olarak da ASP.NET isteği işleyip HttpApplication pipeline’ına sokar. Bu pipeline bir çok event içerir örneği isteğin validasyonu,URL mapping,cache’e erişim ve dahası.

HttpApplication sınıfı bir çok event üretir. Bu eventlerden en çok kullanılanlarına bir göz atalım :
Application_start  : IIS uygulamamızı ilk defa çalıştırdığında bu event tetiklenir.
Application_End  : IIS’den uygulamamız kapatıldığında bu event tetiklenir. Loglama için kullanılabilir.
Application_Error  : Uygulamada bir error alındığı zaman fırlatılır.
Application_LogRequest  : Uygulamaya bir istek gönderildiğinde fırlatılır , bunu isteğe göre custom logging bilgisi yazmak için kullanabiliriz.
Application_PostLogRequest  : İsteğin loglanması tamamlandıktan sonra fırlatılır.

Bütüm bu evenleri Global.asax dosyasından yönetebilirsiniz.
ÖRNEK Global.asax içeriği :
<%@ Application Language=”C#” %>
<script runat=”server”>
void Application_Start(object sender, EventArgs e)
{
Application[“UsersOnline”] = 0;
}

void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application[“UsersOnline”] = (int)Application[“UsersOnline”] + 1;
Application.UnLock();
}

void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application[“UsersOnline”] = (int)Application[“UsersOnline”] – 1;
Application.UnLock();
}
</script>

Global.asx içerisinde uygulama seviyesinde state verisi taşınabilir.
Application.Lock();
Application[“PageRequestCount”] = ((int)Application[“PageRequestCount”]) + 1;
Application.UnLock();

NOT: Bir uygulamadaki aktif kullanıcıların sayısını bulmak için custom bir kod yazmaya gerek yoktur. ASP.NET in içerisinde birçok counter bulunmaktadır.
counter

Yaşam döngüsü eventleri :
PreInit  :  Sayfa için handle edilecek ilk evettir.Page ve Masterpage için dinamik olarak kontrol ekleme çıkarma ve tema set etme için kullanılabilir.
Init : Bütün kontroller initialize olduktan sonra bu event fırlatılır. Content page’e kontol ekleme için kullanılabilir.
InitComplete : Bütün sayfa ve kontroller bittiğinde fırlatılır.
PreLoad : Sayfanın ve kontollerin viewstate’i dolmadan ve postback işletilmeden fırlatılır.
Load : Page bu anda stabil bir durumdadır.
Control (postback) event(s) :Bu anda sayfanın ve kontollerin postbackten dolayı oluşan bütün eventleri çağrılır.
LoadComplete : Bütün kontroller dolmuştur.
PreRender : Sayfadaki ve kontroldeki final değişiklikler için kullanılır.
SaveStateComplete : Bu anda sayfanın ve kontrollerin view state i set edilmiştir.
Render : Sayfa html’e dönüştürüldüğü yerdir. Kendi custom kontollerimizde html değişiklikleri yapabilmek için kullanılabilir.
UnLoad : Bu adımı kaynakları bırakmak için kullanabiliriz.

İlgili Yazılar:

http://www.csharpnedir.com/articles/read/?filter=&author=36&cat=&id=690&title=Asp.Net%202.0%20Temelleri%20:%20Bir%20Web%20Sayfas%C4%B1n%C4%B1n%20Anatomisi

Aralık 7, 2011 Posted by | ASP.NET | , , , , , , , , , , , , , | 1 Yorum

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>

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