{"id":33075,"date":"2010-06-06T18:04:33","date_gmt":"2010-06-06T16:04:33","guid":{"rendered":"\/post\/C-ile-Windows-Server-AppFabric-Onbellek-Etkilesimi.aspx"},"modified":"2010-06-06T18:04:33","modified_gmt":"2010-06-06T16:04:33","slug":"c-ile-windows-server-appfabric-onbellek-etkilesimi","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/","title":{"rendered":"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi"},"content":{"rendered":"<p>Daha \u00f6nceki makalelerimde sizlerle Windows Server AppFabric\u2019in <a href=\"\/en\/?p=17\">nas\u0131l kurulaca\u011f\u0131n\u0131<\/a>, geli\u015ftirme ortam\u0131n\u0131n <a href=\"\/en\/?p=45\">nas\u0131l haz\u0131rlanaca\u011f\u0131n\u0131<\/a> payla\u015fm\u0131\u015ft\u0131m. Bu makalemde ise C# ile Windows Server AppFabric \u00f6nbelle\u011fiyle nas\u0131l etkile\u015fimde bulunaca\u011f\u0131n\u0131z\u0131 payla\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p>\u00d6nbelle\u011fi kullanmaya ba\u015flamadan \u00f6nce Sistem y\u00f6neticisi ile g\u00f6r\u00fc\u015ferek Windows Server AppFabric \u00d6nbellek hizmetinin kurulu oldu\u011fu sunucular\u0131 ve bu sunuculardaki \u00f6nbellek portunu \u00f6\u011frenmelisiniz. Makalemin geri kalan\u0131nda Windows Server AppFabric \u00f6nbellek k\u00fcmesinin yerel makinenizde 22233 portu \u00fczerinden hizmet veren tek bir sunucu ile hizmet verdi\u011fi varsay\u0131m\u0131yla \u00f6rnekleme yapaca\u011f\u0131m.<\/p>\n\n\n\n<p>C# ile bir \u00f6nbellek k\u00fcmesine ba\u011flanmak i\u00e7in \u00f6ncelikle bir yap\u0131land\u0131rma s\u0131n\u0131f\u0131 (<em>DataCacheFactoryConfiguration<\/em>) olu\u015fturmal\u0131 ve bu s\u0131n\u0131f i\u00e7erisinde en az bir \u00f6nbellek k\u00fcmesi \u00fcyesi \u00f6nbellek sunucusu belirtmelisiniz.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var yapilandirma = new DataCacheFactoryConfiguration();\nyapilandirma.Servers = new[] { new DataCacheServerEndpoint(\"localhost\", 22233) };\nyapilandirma.LocalCacheProperties = new DataCacheLocalCacheProperties();<\/pre>\n\n\n\n<p>Yukar\u0131da da belirtti\u011fim gibi burada en az bir \u00f6nbellek sunucu bilgisi verilmesi yeterlidir. Windows Server AppFabric \u00f6nbellek k\u00fct\u00fcphanesi arka planda bu bilgiyi kullanarak \u00f6nbellek k\u00fcmesine ba\u011flanmakta ve k\u00fcmedeki t\u00fcm \u00f6nbellek sunucular\u0131n\u0131n bilgilerini almaktad\u0131r. Y\u00fcksek eri\u015filebilirlik gerektiren bir uygulama geli\u015ftiriyorsan\u0131z size tavsiyemse burada k\u00fcmenizde bulunan m\u00fcmk\u00fcn oldu\u011funca fazla sunucunun bilgisini vermeniz; \u00e7\u00fcnk\u00fc tek sunucu bilgisinin verildi\u011fi senaryolarda ilk ba\u011flant\u0131 s\u0131ras\u0131nda bu sunucunun eri\u015filemiyor olmas\u0131 halinde k\u00fcmedeki di\u011fer sunucular ayakta olsa bile uygulaman\u0131z onlardan haberdar olmad\u0131\u011f\u0131 i\u00e7in kullan\u0131lamayacakt\u0131r.<\/p>\n\n\n\n<p>Yukar\u0131daki kod sat\u0131rlar\u0131 sonras\u0131nda geriye k\u00fcmeye ba\u011flanmak i\u00e7in yapman\u0131z gereken tek sat\u0131r kod kal\u0131yor; \u00f6nbellek fabrikas\u0131n\u0131n olu\u015fturulmas\u0131.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var onbellekFabrikasi = new DataCacheFactory(yapilandirma);<\/pre>\n\n\n\n<p>Bu kod ile birlikte uygulaman\u0131 k\u00fcmeye ba\u011flanacak ve bu \u00f6nbellek fabrikas\u0131 \u00fczerinden iste\u011finiz belle\u011fe eri\u015febileceksiniz. Kime geli\u015ftirme\/\u00fcretim ortamlar\u0131nda yukar\u0131daki kodlar i\u015fletilirken a\u015fa\u011f\u0131daki hata ile kar\u015f\u0131la\u015fabilirsiniz;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>ErrorCode&lt;ERRCA0017&gt;:SubStatus&lt;ES0006&gt;:Ge\u00e7ici bir hata var. L\u00fctfen daha sonra yeniden deneyin. (Belirtilen \u00d6nbellek sunucular\u0131ndan biri veya birden fazlas\u0131, a\u011f\u0131n ya da sunucular\u0131n me\u015fgul olmas\u0131 nedeniyle kullan\u0131lam\u0131yor. K\u00fcmede bu istemci hesab\u0131na g\u00fcvenlik izni verildi\u011finden ve t\u00fcm \u00f6nbellek konaklar\u0131nda g\u00fcvenlik duvar\u0131 arac\u0131l\u0131\u011f\u0131yla AppFabric \u00d6nbelle\u011fe Alma Hizmeti&#8217;ne izin verildi\u011finden emin olun. Daha sonra yeniden deneyin.)<\/p><\/blockquote>\n\n\n\n<p>Genelde yaz\u0131l\u0131mc\u0131n\u0131n unutkanl\u0131\u011f\u0131ndan kaynaklanan bu hatay\u0131 ald\u0131\u011f\u0131n\u0131zda \u00f6ncelikle \u00f6nbellek hizmetinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun. Hizmetin \u00e7al\u0131\u015fm\u0131yor olmas\u0131 durumunda sistem y\u00f6neticisi olarak ba\u015flat\u0131lan PowerShell oturumunda (Ba\u015flat men\u00fcs\u00fc \u2013&gt; Windows Server AppFabric \u2013&gt; \u00d6nbelle\u011fe Alma Y\u00f6netimi Windows PowerShell) a\u015fa\u011f\u0131daki komut ile \u00f6nbellek k\u00fcmesini ba\u015flatmal\u0131s\u0131n\u0131z;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"msdos\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">start-cachecluster<\/pre>\n\n\n\n<p>\u00d6nbellek k\u00fcmesi \u00e7al\u0131\u015f\u0131yor olmas\u0131na ra\u011fment bu hatay\u0131 al\u0131yorsan\u0131z \u00f6nbellek k\u00fcmesine eri\u015fim yetkiniz olmayabilir. Bu durumda uygulamay\u0131 \u00e7al\u0131\u015ft\u0131ran kullan\u0131c\u0131n\u0131n\/makinenin \u00f6nbelle\u011fe eri\u015fim yetkisi olup olmad\u0131\u011f\u0131 a\u015fa\u011f\u0131daki Windows Server AppFabric PowerShell komutu ile kontrol edilmeli;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"msdos\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Get-CacheAllowedClientAccounts<\/pre>\n\n\n\n<p>E\u011fer bu komutun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 sonucu gelen liste i\u00e7erisinde kullan\u0131c\u0131\/makine yer alm\u0131yorsa a\u015fa\u011f\u0131daki komut vas\u0131tas\u0131yla \u00f6nbellek k\u00fcmesine eri\u015fim yetkisi verilmelidir;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"msdos\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Grant-CacheAllowedClientAccount [KULLANICI ADI]<\/pre>\n\n\n\n<p>\u00d6nbellek k\u00fcmesi eri\u015fim yetkisi ile ilgili s\u0131k\u0131nt\u0131lar\u0131 \u00e7\u00f6zd\u00fckten sonra a\u015fa\u011f\u0131daki komut ile varsay\u0131lan \u00f6nbellek al\u0131narak \u00fczerinde i\u015flem yap\u0131labilir.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var onbellek = onbellekFabrikasi.GetDefaultCache();<\/pre>\n\n\n\n<p>Tabi ki i\u015flemlerinizi varsay\u0131lan \u00f6nbellek d\u0131\u015f\u0131nda bir ba\u015fka \u00f6nbellek \u00fczerinde de ger\u00e7ekle\u015ftirebilirsiniz. Bu durumda kodumuz a\u015fa\u011f\u0131daki gibi olmal\u0131d\u0131r;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var onbellek = onbellekFabrikasi.GetCache(\"[\u00d6NBELLEK ADI]\");<\/pre>\n\n\n\n<p>Yukar\u0131daki her iki kod par\u00e7ac\u0131\u011f\u0131na da performans a\u00e7\u0131s\u0131nda bakacak olursak; \u00f6nbelle\u011fi bir \u00f6nbellek fabrikas\u0131ndan almak maliyetli bir i\u015ftir. Bu sebeple de her ihtiya\u00e7 duyuldu\u011funda \u00f6nbellek fabrikas\u0131ndan bir \u00f6rne\u011fini almak yerine bir defa alarak bunu bir de\u011fi\u015fken i\u00e7erisinde saklamak ve gerekti\u011finde bu de\u011fi\u015fken \u00fczerinden i\u015flem yapmak daha do\u011fru olacakt\u0131r.<\/p>\n\n\n\n<p>\u00d6nbellek\u2019e eri\u015fmek i\u00e7in <em>onbellek<\/em> nesnemizi olu\u015fturduktan sonra isterseniz \u015fimdi de nas\u0131l i\u00e7erisine veri koyabilece\u011fimizi g\u00f6relim. Windows Server AppFabric \u00f6nbelle\u011fe konulacak olan nesneler i\u00e7in tek zorunluluk bu nesnelerin serilize edilebilir olarak i\u015faretlenmi\u015f olmas\u0131d\u0131r. Bunun i\u00e7in s\u0131n\u0131f tan\u0131mlamas\u0131n\u0131n hemen \u00fczerinde Serializable \u00f6zniteli\u011fi kullan\u0131lmal\u0131d\u0131r. A\u015fa\u011f\u0131da tan\u0131mlamas\u0131n\u0131 bulaca\u011f\u0131n\u0131z <em>OnbellegeAtilabilirNesne<\/em> s\u0131n\u0131f\u0131 \u00f6nbelle\u011fe al\u0131nabilecek s\u0131n\u0131flar\u0131n tan\u0131mlar\u0131na bir \u00f6rnek olup yaz\u0131m\u0131n devam\u0131nda bu s\u0131n\u0131f \u00fczerinden \u00f6rnekleme yaparak konunun peki\u015fmesine \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OnbellegeAtilabilirNesne {\n    public string BirStringIfade { get; set; }\n    public int BirIntIfade { get; set; }\n}<\/pre>\n\n\n\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi basit bir tan\u0131mlamaya sahip olan <em>OnbellegeAtilabilirNesne<\/em> s\u0131n\u0131f\u0131 bir string ve bir int \u00f6zellikten olu\u015fmaktad\u0131r.<\/p>\n\n\n\n<p>Windows Server AppFabric \u00f6nbelle\u011fe yeni bir nesne koymak i\u00e7in \u00f6ncelikle ilgili s\u0131n\u0131f\u0131n bir \u00f6rne\u011fini almal\u0131 ve bu \u00f6rnek i\u00e7in tekil bir anahtar belirlemelisiniz. Ard\u0131ndan \u00f6nbellek nesnesi \u00fczerindeki Add metodu yard\u0131m\u0131yla nesnenizi \u00f6nbelle\u011fe ekleyebilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var ornekVeri = new OnbellegeAtilabilirNesne {\n    BirStringIfade = \"Test verisi\",\n    BirIntIfade = 1\n};\n\nvar ornekVeriSurumu = onbellek.Add(\"testAnahtari\", ornekVeri);<\/pre>\n\n\n\n<p><em>Add<\/em> metodu ile ilgili dikkat etmeniz gereken bir nokta, bu metodu kullanarak bir \u00f6nbelle\u011fe ayn\u0131 anahtarla ikinci bir de\u011fer eklenemeyecek olmas\u0131d\u0131r. E\u011fer yukar\u0131daki kodu arka arkaya iki kez \u00e7al\u0131\u015ft\u0131racak olursan\u0131z a\u015fa\u011f\u0131daki hatay\u0131 ald\u0131\u011f\u0131n\u0131z\u0131 g\u00f6receksiniz;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>ErrorCode&lt;ERRCA0008&gt;:SubStatus&lt;ES0001&gt;:\u00d6nbellekte zaten varolan bir Anahtar ile nesne olu\u015fturulmaya \u00e7al\u0131\u015f\u0131l\u0131yor. \u00d6nbellek, nesneler i\u00e7in yaln\u0131zca benzersiz Anahtar de\u011ferlerini kabul eder.<\/p><\/blockquote>\n\n\n\n<p>Ancak; ekledi\u011finiz ilk de\u011fer zaman\u0131n\u0131n dolmas\u0131yla birlikte haf\u0131zadan silinirse ikinci kez ekledi\u011finizde bu hata mesaj\u0131n\u0131 almazsan\u0131z.<\/p>\n\n\n\n<p>\u00d6nbelle\u011fe de\u011fer ekleme s\u0131ras\u0131nda kullan\u0131lan <em>Add<\/em> metoduna alternatif olarak <em>Put<\/em> metodu da kullan\u0131labilir. \u00dcstelik <em>Add<\/em> metodundan farkl\u0131 olarak <em>Put<\/em> metodunda ayn\u0131 anahtar ile ikinci bir de\u011fer eklenmesi durumunda hata almazs\u0131n\u0131z. Put metodu ayn\u0131 de\u011ferle ikinci bir anahtar eklenmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda \u00f6nceki de\u011ferin \u00fczerine yeni de\u011feri yazar.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var ornekVeri = new OnbellegeAtilabilirNesne {\n    BirStringIfade = \"Test verisi\",\n    BirIntIfade = 1\n};\n\nvar ornekVeriSurumu = onbellek.Put(\"testAnahtari\", ornekVeri);<\/pre>\n\n\n\n<p>Bu iki metodtan hangisi kullanaca\u011f\u0131n\u0131z i\u015f mant\u0131\u011f\u0131n\u0131za g\u00f6re de\u011fi\u015fecektir.<\/p>\n\n\n\n<p>\u00d6nbelle\u011fe eklenmi\u015f verilere <em>Get<\/em> metodu kullan\u0131larak eri\u015filebilir. A\u015fa\u011f\u0131daki kod par\u00e7ac\u0131\u011f\u0131 daha \u00f6nceden \u00f6nbelle\u011fe <em>testAnahtari<\/em> anahtar\u0131 ile ekledi\u011fimiz veriye nas\u0131l eri\u015febilece\u011fimizi g\u00f6stermektedir;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">OnbellegeAtilabilirNesne ornekVeri;\n\nif ((ornekVeri = (OnbellegeAtilabilirNesne)onbellek.Get(\"testAnahtari\")) != null) {\n    MessageBox.Show(string.Format(@\"'testAnahtari' ahtar\u0131yla saklanm\u0131\u015f veri \u00f6nbellekten okundu :\n        BirStringIfade : {0}\n        BirIntIfade : {1}\",\n        ornekVeri.BirStringIfade,\n        ornekVeri.BirIntIfade));\n}\nelse {\n    MessageBox.Show(\"\u00f6nbellekte 'testAnahtari' anahtar\u0131 ile bir veri bulunamad\u0131\");\n}<\/pre>\n\n\n\n<p>Add, Put ve Get metodlar\u0131 aksi belirtilmedi\u011fi s\u00fcrece k\u00fcme taraf\u0131nda yonetilen sitem regionlar\u0131nda i\u015flem yapmaktad\u0131r. \u0130stenirse bu metodlar\u0131n i\u015flem yap\u0131lmak istenen region\u2019\u0131 belirtebilece\u011finiz overload\u2019lar\u0131 da kullan\u0131labilir. A\u015fa\u011f\u0131daki kod par\u00e7ac\u0131\u011f\u0131 ile Add ya da Put ile ekledi\u011finiz verilerin hangi sistem alan\u0131nda yer ald\u0131\u011f\u0131n\u0131 bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var testAnahtariBolgeAdi = onbellek.GetSystemRegionName(\"testAnahtari\");<\/pre>\n\n\n\n<p>\u00d6nbelle\u011fe ekledi\u011finiz bir veriyi silmek isterseniz de onbellek nesnesi i\u00e7erisinde yer alan Remove metodunu kullanabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">onbellek.Remove(\"testAnahtari\");<\/pre>\n\n\n\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi Windows Server AppFabric \u00d6nbellek i\u015flemleri daha \u00f6nceki makalelerimde sizlerle payla\u015ft\u0131\u011f\u0131m mimariyi m\u00fcmk\u00fcn oldu\u011funda saklayarak geli\u015ftiricilere m\u00fcmk\u00fcn olan en basit \u015fekilde bir aray\u00fcz sa\u011flam\u0131\u015ft\u0131r. Pek \u00e7ok i\u015flem bir ka\u00e7 basit metod \u00e7a\u011fr\u0131s\u0131 ile yap\u0131labilir. Buna bir ba\u015fka \u00f6rne\u011fi a\u015fa\u011f\u0131daki region olu\u015fturarak bu region i\u00e7erisine veri eklemeyi g\u00f6stern kod par\u00e7ac\u0131\u011f\u0131nda bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">onbellek.CreateRegion(\"testBolgesi\");\nonbellek.Add(\"testAnahtari1\", new OnbellegeAtilabilirNesne {\n    BirStringIfade = \"Test verisi 1\",\n    BirIntIfade = 1\n}, \"testBolgesi\");\n\nonbellek.Add(\"testAnahtari2\", new OnbellegeAtilabilirNesne {\n    BirStringIfade = \"Test verisi 2\",\n    BirIntIfade = 1\n}, \"testBolgesi\");\n\nonbellek.Add(\"testAnahtari3\", new OnbellegeAtilabilirNesne {\n    BirStringIfade = \"Test verisi 3\",\n    BirIntIfade = 1\n}, \"testBolgesi\");<\/pre>\n\n\n\n<p>\u015eimdiye kadar anlatt\u0131klar\u0131m Windows Server AppFabric \u00f6nbelle\u011fini kullanan uygulamalar geli\u015ftirmenizde h\u0131zl\u0131 bir ba\u015flang\u0131\u00e7 olacakt\u0131r. Temel i\u015flemler olan veri ekleme, de\u011fi\u015ftirme ve \u00e7\u0131karman\u0131n yan\u0131 s\u0131ra bir b\u00f6lge olu\u015fturup ayn\u0131 i\u015flemleri bu b\u00f6lge \u00fczerinde ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n\n\n\n<p>Windows Server AppFabric \u00f6nbelle\u011fi yukar\u0131da anlatt\u0131\u011f\u0131m istemci k\u00fct\u00fcphanesi sayesinde \u00f6nbellek k\u00fcmesi ile haberle\u015febilmektedir. Bu haberle\u015fme de arka planda WCF altyap\u0131s\u0131n\u0131 kullanmaktad\u0131r. Yap\u0131lan bu i\u015flemler a\u011f \u00fczerinde gidip geldi\u011fi i\u00e7in bir maliyeti vard\u0131r. Bir \u00f6nbelle\u011fi ilk kez aya\u011fa kald\u0131r\u0131rken programsal olarak yapt\u0131klar\u0131m\u0131z\u0131 ele alal\u0131m; \u00f6nbellekten veri \u00e7ekerken kulland\u0131\u011f\u0131m\u0131z her Get metod \u00e7a\u011fr\u0131s\u0131nda bir WCF iste\u011fi olu\u015fmakta, bu durumda b\u00fcy\u00fck \u00f6l\u00e7ekli verileri getirirken olu\u015facak y\u00fck\u00fc san\u0131r\u0131m anlatmama gerek yok. Windows Server AppFabric \u00f6nbelle\u011fi tasarlan\u0131rken bu gibi senaryolar da g\u00f6z \u00f6n\u00fcne al\u0131narak toplu veri \u00e7ekilmesi i\u00e7in bir metod eklemi\u015ftir; <em>BulkGet<\/em>. Belirli bir b\u00f6lge i\u00e7in verece\u011finiz anahtarlar \u00e7ekilerek uygun veriler size toplu olarak iletilmektedir. A\u015fa\u011f\u0131da bir \u00f6nceki \u00f6rnekte olu\u015fturdu\u011fum ve i\u00e7erisine veri ekledi\u011fim <em>testB\u00f6lgesi<\/em> i\u00e7erisindeki verilerin BulkGet ile sorgulanmas\u0131na dair \u00f6rnek bir kod par\u00e7ac\u0131\u011f\u0131 bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var ornekVeriler = onbellek.BulkGet(new[] {\n    \"testAnahtari1\",\n    \"testAnahtari2\",\n    \"testAnahtari2\" }, \"testBolgesi\");<\/pre>\n\n\n\n<p>Da\u011f\u0131t\u0131k bir ortamda \u00f6nbellek hizmeti sunan Windows Server AppFabric\u2019in sundu\u011fu bir di\u011fer \u00f6zellikte g\u00fcvenli g\u00fcncellemedir. G\u00fcncellenmesi istenen nesne, istenirse k\u00fcme i\u00e7erisinden al\u0131n\u0131rken kilitlenmekte, bu sayede de ayn\u0131 anda tek bir istemci nesneye eri\u015ferek g\u00fcncelleyebilmektedir. G\u00fcvenlik g\u00fcncelleme amac\u0131yla Windows Server AppFabric \u00f6nbellek bize&nbsp; Unlock, GetAndLock, PutAndUnlock gibi metodlar sunmaktad\u0131r.<\/p>\n\n\n\n<p>A\u015fa\u011f\u0131daki \u00f6rnek kod par\u00e7ac\u0131\u011f\u0131nda, daha \u00f6nceden <em>testAnahtari<\/em> anahtari ile \u00f6nbelle\u011fe eklemi\u015f oldu\u011fumuz nesne <em>GetAndLock<\/em> metodu kullan\u0131larak kilitlenerek de\u011feri al\u0131nm\u0131\u015f ve <em>PutAndUnlock<\/em> metodu ile g\u00fcvenli bir \u015fekilde g\u00fcncellenerek kilit kald\u0131r\u0131lm\u0131\u015ft\u0131r.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DataCacheLockHandle handle;\nvar onbellegeAtilabilirNesne = onbellek.GetAndLock(\"testAnahtari\",\n    TimeSpan.FromSeconds(1),\n    out handle) as OnbellegeAtilabilirNesne;\n\nonbellegeAtilabilirNesne.BirStringIfade = \"De\u011fi\u015ftirilmi\u015f Veri\";\n\nonbellek.PutAndUnlock(\"testAnahtari\", onbellegeAtilabilirNesne, handle);<\/pre>\n\n\n\n<p>Dikkat edecek olursan\u0131z bu \u00f6rnekte nesne GetAndUnlock ile de\u011feri al\u0131n\u0131p \u00f6nbellekte kilitlenirken parametre olarak TimeSpan kabul etmekte. TimeSpan kullanarak belirtti\u011fimiz bu s\u00fcre nesnenin \u00f6nbellek taraf\u0131ndan ne kadar s\u00fcreyle kilitli tutulaca\u011f\u0131n\u0131 belirtir. Bu s\u00fcre i\u00e7erisinde nesne kilidi kald\u0131r\u0131lmazsa \u00f6nbellek otomatik olarak kald\u0131racakt\u0131r. Bu y\u00f6ntem sayesinden olas\u0131 istemci ba\u011flant\u0131 problemleri sonucunda nesnenin sonsuza kadar kilitli kalmas\u0131n\u0131n \u00f6n\u00fcne ge\u00e7ilmi\u015f olur.<\/p>\n\n\n\n<p>Kilitlenmi\u015f bir nesne \u00fczerinde yap\u0131lan i\u015flemler sonras\u0131nda herhangi bir g\u00fcncelleme yap\u0131lmadan kilidin kald\u0131r\u0131lmas\u0131 istenirse <em>PutAndUnlock<\/em> yerine <em>Unlock<\/em> metodu kullan\u0131labilir. Unlock metodu veri g\u00fcncellemesi yapmay\u0131p sadece mevcut kilidi kald\u0131racakt\u0131r.<\/p>\n\n\n\n<p>Not : <em>GetAndLock<\/em> ile bir anahtara ait de\u011feri almaya ve kilitleme \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda kayd\u0131 olmayan bir anahtar kullan\u0131rsan\u0131z a\u015fa\u011f\u0131daki hata mesaj\u0131n\u0131 al\u0131rs\u0131n\u0131z;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>ErrorCode&lt;ERRCA0006&gt;:SubStatus&lt;ES0001&gt;:Ba\u015fvurulan Anahtar yok. Hatay\u0131 gidermek i\u00e7in bir Anahtar\u0131 temel alan nesneler olu\u015fturun.<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Daha \u00f6nceki makalelerimde sizlerle Windows Server AppFabric\u2019in nas\u0131l kurulaca\u011f\u0131n\u0131, geli\u015ftirme ortam\u0131n\u0131n nas\u0131l haz\u0131rlanaca\u011f\u0131n\u0131 payla\u015fm\u0131\u015ft\u0131m. Bu makalemde ise C# ile Windows Server AppFabric \u00f6nbelle\u011fiyle nas\u0131l etkile\u015fimde bulunaca\u011f\u0131n\u0131z\u0131 payla\u015faca\u011f\u0131m. \u00d6nbelle\u011fi kullanmaya ba\u015flamadan \u00f6nce Sistem y\u00f6neticisi ile g\u00f6r\u00fc\u015ferek Windows Server AppFabric \u00d6nbellek hizmetinin kurulu oldu\u011fu sunucular\u0131 ve bu sunuculardaki \u00f6nbellek portunu \u00f6\u011frenmelisiniz. Makalemin geri kalan\u0131nda Windows Server AppFabric&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,80],"tags":[79,41,97],"class_list":["post-33075","post","type-post","status-publish","format-standard","hentry","category-turkce","category-windows-server-appfabric","tag-appfabric","tag-c","tag-cache"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi - Fatih Boy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"Daha \u00f6nceki makalelerimde sizlerle Windows Server AppFabric\u2019in nas\u0131l kurulaca\u011f\u0131n\u0131, geli\u015ftirme ortam\u0131n\u0131n nas\u0131l haz\u0131rlanaca\u011f\u0131n\u0131 payla\u015fm\u0131\u015ft\u0131m. Bu makalemde ise C# ile Windows Server AppFabric \u00f6nbelle\u011fiyle nas\u0131l etkile\u015fimde bulunaca\u011f\u0131n\u0131z\u0131 payla\u015faca\u011f\u0131m. \u00d6nbelle\u011fi kullanmaya ba\u015flamadan \u00f6nce Sistem y\u00f6neticisi ile g\u00f6r\u00fc\u015ferek Windows Server AppFabric \u00d6nbellek hizmetinin kurulu oldu\u011fu sunucular\u0131 ve bu sunuculardaki \u00f6nbellek portunu \u00f6\u011frenmelisiniz. Makalemin geri kalan\u0131nda Windows Server AppFabric...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2010-06-06T16:04:33+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi\",\"datePublished\":\"2010-06-06T16:04:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\"},\"wordCount\":1738,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"keywords\":[\"AppFabric\",\"C#\",\"Cache\"],\"articleSection\":[\"T\u00fcrk\u00e7e\",\"Windows Server AppFabric\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\",\"url\":\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\",\"name\":\"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"datePublished\":\"2010-06-06T16:04:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi - Fatih Boy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/","og_locale":"en_US","og_type":"article","og_title":"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi - Fatih Boy","og_description":"Daha \u00f6nceki makalelerimde sizlerle Windows Server AppFabric\u2019in nas\u0131l kurulaca\u011f\u0131n\u0131, geli\u015ftirme ortam\u0131n\u0131n nas\u0131l haz\u0131rlanaca\u011f\u0131n\u0131 payla\u015fm\u0131\u015ft\u0131m. Bu makalemde ise C# ile Windows Server AppFabric \u00f6nbelle\u011fiyle nas\u0131l etkile\u015fimde bulunaca\u011f\u0131n\u0131z\u0131 payla\u015faca\u011f\u0131m. \u00d6nbelle\u011fi kullanmaya ba\u015flamadan \u00f6nce Sistem y\u00f6neticisi ile g\u00f6r\u00fc\u015ferek Windows Server AppFabric \u00d6nbellek hizmetinin kurulu oldu\u011fu sunucular\u0131 ve bu sunuculardaki \u00f6nbellek portunu \u00f6\u011frenmelisiniz. Makalemin geri kalan\u0131nda Windows Server AppFabric...Read More","og_url":"https:\/\/fatihboy.com\/en\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/","og_site_name":"Fatih Boy","article_published_time":"2010-06-06T16:04:33+00:00","author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi","datePublished":"2010-06-06T16:04:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/"},"wordCount":1738,"commentCount":5,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"keywords":["AppFabric","C#","Cache"],"articleSection":["T\u00fcrk\u00e7e","Windows Server AppFabric"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/","url":"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/","name":"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"datePublished":"2010-06-06T16:04:33+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/c-ile-windows-server-appfabric-onbellek-etkilesimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"C# ile Windows Server AppFabric \u00d6nbellek Etkile\u015fimi"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=33075"}],"version-history":[{"count":0,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33075\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}