• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

WCF 4.0 Yenilikleri - HTTP Cache Desteği [Beta 1]

Performans pek çok uygulama geliştirme ortamında önem arz eden konuların başında gelmektedir. Özellikle Web tabanlı uygulamalarda performans arttırmak adına göz önüne alınan kriterlerden biriside farklı tipteki önbellekleme(Caching) işlemleridir.

01.01.2013

Yazar: Burak Selim Şenyurt (Google+)

Kategori: WCF

3545

Merhaba arkadaşlar,

Performans pek çok uygulama geliştirme ortamında önem arz eden konuların başında gelmektedir. Özellikle Web tabanlı uygulamalarda performans arttırmak adına göz önüne alınan kriterlerden biriside farklı tipteki önbellekleme(Caching) işlemleridir. En basit ve popülerlerinden birisi olan Output Caching,REST tabanlı WCF servisleri içinde kullanılabilmektedir. WCF' in önceki sürümünde WebOperationContext tipinden yararlanılarak ekstra kod eforu ile ele alınabilen Output Cache özelliği, 4.0 sürümünde tamamen dekleratif olarak değerlendirilebilmektedir. Aslında bu yenilik bilindiği üzere WCF Rest Starter Kit Preview 2 ile birlikte .Net Framework 3.5 üzerinde de uygulanabilmektedir. Output Cache özelliği performans için önemli bir kriter olduğundan, WCF 4.0 versiyonunda doğrudan ele alınmaktadır.

Bu yazımızda ön bellekleme işleminin WCF 4.0 içerisinde, REST tabanlı servisleri için nasıl geliştirilebileceğini ele almaya çalışacağız. İşe ilk olarak bir WCF Service Application projesi oluşturarak ve içerisine aşağıdaki servis sözleşmesi ve uygulayıcı tipi ekleyerek başlayabiliriz.

Servis Sözleşmesi(Service Contract)

using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Web.Caching;

namespace Calculus
{
    [ServiceContract(Namespace="http://calculus/BasicMathService")]
    public interface IBasicMathService
    {
        [AspNetCacheProfile("ShortCache")] // Config dosyasındaki outputCacheProfile girdilerinden parametre olarak verilen isimdekini işaret eder
        [OperationContract]
        [WebGet]       
        string Sum(double x, double y);
    }
}

Uygulayıcı tip;

using System;
using System.ServiceModel.Activation;

namespace Calculus
{
    [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
    public class BasicMathService
        : IBasicMathService
    {
        public string Sum(double x, double y)
        {
            return string.Format("{0} zamanlı hesaplama {1}+{2}={3}", DateTime.Now.ToLongTimeString(), x, y, x + y);
        }
    }
}

Servisimize ait svc içeriği;

<%@ ServiceHost Language="C#" Debug="true" Service="Calculus.BasicMathService" CodeBehind="BasicMathService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

IBasicMathService isimli servis sözleşmesi içerisinde yer alan Sum metoduna WebGet ve OperationContract dışında AspNetCacheProfile isimli bir niteliğin(attribute) daha uygulandığı görülmektedir. Bu nitelik parametre olarak string bir bilgi alır. Bu bilgi ise biraz sonra yazacağımız Web.config dosyası içerisindeki bir Cache profilini işaret etmektedir. Dolayısıyla bir operasyonun çıktısının ön belleklenmesi için gerekli özellikler, konfigurasyon dosyasında tanımlanır. Servis kodunda dikkat çekici noktalardan biriside, BasicMathService tipinin, AspNetCompatibilityRequirements isimli niteliği uygulamış olmasıdır. Bu durumu biraz sonra değerlendiriyor olacağız nitekim uygulanmadığı hallerde başımıza iş açacaktır Undecided

Tabikide üzerinde durmamız gereken en önemli kısım config dosyası içeriğidir.

<?xml version="1.0"?>
<configuration>
 <system.web>
  <compilation targetFrameworkMoniker=".NETFramework,Version=v4.0" debug="false"/>
 </system.web>
 <system.web>
  <caching>
   <outputCacheSettings>
    <outputCacheProfiles>
     <!-- Süreleri farklı olan iki ayrı Cache profili tanımlanmıştır -->
     <add name="ShortCache" duration="20" varyByParam="none"/>
     <add name="LongCache" duration="600" varyByParam="none"/>
    </outputCacheProfiles>
   </outputCacheSettings>
  </caching>
 </system.web>
 <system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <!--WebServiceHostFactory tipini kullandığımız için aşağıdaki davranışı eklememize gerek kalmamıştır-->
  <!--<behaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp enableHelp="true" />
        </behavior>
      </endpointBehaviors>
    </behaviors>-->
  <services>
   <service name="Calculus.BasicMathService">
    <endpoint binding="webHttpBinding" contract="Calculus.IBasicMathService"/>
   </service>
  </services>
 </system.serviceModel>
</configuration>

Görüldüğü üzere outputCacheSettings elementi içerisinde iki farklı önbellekleme profili tanımlanmıştır. Buna göre, Sum isimli operasyonumuz 20 saniyelik ön bellekleme yapan ve Querystring parametrelerini hesaba katmayan bir yapı sunmaktadır. (Tabiki önbellekleme profilini oluştururken farklı özellikleride değerlendirebiliriz. Örneğin ön bellekleme lokasyonunu değiştirebilir sunucu tarafı, istemci tarafı veya her iki taraf gibi değerler verilebilir.) Config dosyasında bold olarak işaretlediğimiz diğer kısımlarda önemlidir. WCF 4.0 tarafına getirilen Output Cache özelliği aslında Asp.Net ortamının hazır olarak sahip olduğu Output Cache kabiliyetlerini kullanmaktadır. Bu nedenle Asp.Net uyumluluğu önemlidir.

Uygulama basit bir kaç ayarlamaya sahip olmasına rağmen geliştirme ve testler sırasında beklenmedik pek çok hata ile karşılabiliriz. Sealed İşte karşılaşabileceğimiz bir kaç hata ve önerilen çözümler(ki bu çözümlerin bir kısmı must olarak görülmelidir)

  • Web.config dosyasında targetFrameworkMonikor değerinin set edildiğinden emin olmalıyız. Edilmediği takdirde çalışma zamanında alınacak hata mesajı :  "The application domain or application pool is currently running version 4.0 or later of the .NET Framework. This can occur if IIS settings have been set to 4.0 or later for this Web application, or if you are using version 4.0 or later of the ASP.NET Web Development Server. The <compilation> element in the Web.config file for this Web application does not contain the required 'targetFrameworkMoniker' attribute for this version of the .NET Framework (for example, '<compilation targetFrameworkMoniker=".NETFramework,Version=v4.0">'). Update the Web.config file with this attribute, or configure the Web application to use a different version of the .NET Framework."
  • aspNetCompatibilityEnabled niteliğinin değeri true olmadığı sürece, AspNetCacheProfile özelliğini kullanamayız. Alınacak çalışma zamanı hata mesajı : "AspNetCacheProfileAttribute is supported only in AspNetCompatibility mode. "
  • aspNetCompatibilityEnabled niteliğinin true olarak atamış olması yeterli olmayacaktır. Nitekim servis sınıfı için AspNetCompatibilityRequirements niteliğinin de set edilmesi gerekir. Edilmediği takdirde alınacak çalışma zamanı hata mesajı : "The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as 'Allowed' or 'Required'"
  • Asp.Net Development Server üzerinden geliştirme yapıldığında Output Cache özelliği test edilememektedir. Output Cache özelliğinin çalışabilmesi için, servis uygulamasının IIS üzerine dağıtılması gerekmektedir.
  • IIS üzerine atılan WCF servis uygulamasının özelliklerinden Target Framework' ün 4.0 versiyonunu işaret edecek şekilde değiştirilmesi gerekir. (Örneği geliştirdiğim zamanda 4.0.20506 versiyonu idi)
  • Güvenlik ile ilişkili bir sıkıntı yaşanabilir. Özellikle varsayılan olarak Anonymous Access ve Integrated Windows Authentication modlarından her ikiside seçili gelebilir. Bu noktada WCF çalışma zamanı sadece bir tanesinin seçili olmasını isteyebilir. Bu durumda sadece Anonymous Access seçeneğini işaretleyerek testleri yapabiliriz. Yapılan değişiklik sonrası yinede hata mesajı alınıyorsa, IIS' in bir kere reset edilmesi gerekebilir.
  • varyByParam değerini kullanmıyorsak bile none olarak atamalıyız(Asp.Net tarafından bildiğimiz bir kural). Yapmadığımız takdirde alacağımız çalışma zamanı hata mesajı : "The cache profile, 'ShortCache', must include value for 'VaryByParam'. "

Gelelim çalışma zamanı sonuçlarına. IIS üzerine atılan WCF servisimizi çalıştırdıktan sonra Sum operasyonu için yapılan ilk HTTP GET talebi sonrası aşağıdaki örnek ekran görüntüsü elde edilmiştir.

Görüldüğü gibi ilk talep karşılanmıştır. Hemen zaman bilgisine dikkat edelim ve 20 saniyelik Output Cache süresi dolmadan önce ikinci bir talepte bulunduğumuzu hatta x ve y değerlerini farklı olarak verdiğimizi düşünelim. Bu durumda aşağıdaki sonuçlar alınacaktır.

Görüldüğü gibi istemciye gönderilen içerik değişmemiştir. Nitekim şu andaki cevap, Asp.Net Output Cache mekanizması tarafından karışlanmış bir önceki talep için üretilen hazır çıktıdır. Ancak Output Cache süresini aştıktan sonra tekrar talepte bulunursak ikinci talep için güncel sonuçları aşağıdaki örnek çıktıda görüldüğü gibi alabiliriz.

Böylece sistemin çalıştığını ispat etmiş olduk Wink Output Cache özelliği REST tabanlı WCF servislerinde, perfomansı arttırıcı bir unsur olarak görülebilir. Nitekim sunucu ve istemci arasındaki gidiş gelişlerde, sürekli hesaplanması gerekmeyen ve çoğunlukla sabit olan içeriklerin tekrardan üretilmesi yerine belirli zaman dilimleri boyunca ön bellekten karşılanması hem servisin işlem yükünü azaltacak hem de hızlı cevap verme sürelerini doğuracaktır. Tekrardan görüşünceye dek hepinize mutlu günler dilerim.

RESTSupport.rar (37,47 kb)

Yazar Hakkında

Burak Selim Şenyurt

Burak Selim Şenyurt

buraksenyurt.com

Yıldız Teknik Üniversitesi Matematik Mühendisliği mezunu olan Şenyurt, 1999 yılında profesyonel olarak adım attığı yazılım dünyasında, 2003 yılından beri Microsoft .Net teknolojileri ile ilgilenmektedir. Yazılım hayatına Assist Line isimli Call Center firmasında Delphi programcısı olarak başlayan Şenyurt sonrasında, sırasıyla Bizitek(Junior Developer), Netron(Master Trainer), Citibank(Outsource Senior Software Developer), Innova(Application Development Consultant), ve TCM(Software Architect) firmalarında görev almıştır. Su anda ING Bank bünyesinde Kıdemli Yazılım Danışmanı olarak görev yapmaktadir. 2006, 2007 yıllarında C#, 2008,2009,2010 yıllarında ise Connected System Developer kategorisinde Microsoft MVP seçilen Şenyurt, evli ve 1 çocuk babasıdır. C# diline olan düşkünlüğü, oğluna S(h)arp adının verilmesinde önemli bir etken olmustur.

Sosyal Medya

ORANLAR

  • 3545izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 122146
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 68381
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 50021
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ