Asp.Net HTTPModule ve HTTPHandler

ASP.NET iş akış süreci, gelen bütün isteklerin ASP.NET tarafından iş akışı üzerinde bulunan birimlere (module) iletilmesiyle başlar. Her birim gelen isteği aldıktan ve istek üzerindeki tüm yetkiyi elde ettikten sonra, en uygun hale gelinceye kadar istek üzerinde işlem yapar. İstek bütün HTTPModule yapılarından geçtikten sonra ilgili HTTPHandler’a iletilir. HTTPHandler istek üzerinde bazı işlemler yaptıktan sonra, isteğe verilen cevap ASP.NET iş akışında isteğin geldiği HTTPModule yapıları aracılığıyla iletilir.

ASP.NET Runtime tarafından gelen isteklerde birden fazla HTTPModule kullanılmasının sebebi, Web uygulamalarında kullanılan Cache (ara belleğe alma), Session (kullanıcı tarafından oluşturulan oturum), Authentication (kimlik doğrulama) nesnelerinin her biri için farklı bir HTTPModule kullanılıyor olmasıdır. HTTPHandler ise HTTPModule yapılarından gelen bilgileri kullanarak uygun html çıktısını üreterek aynı HTTPModule yapıları üzerinden ASP.NET Runtime’a iletilir.

Daha detaylı anlatım için URL;

http://bidb.itu.edu.tr/seyirdefteri/blog/2013/09/08/httpmodule-ve-httphandler

REST Apilerde Dönülen HTTP Status Kodları (Yaygın Kullanılanlar)

HTTP statuslarını gruplayacak olursak;
Bilgilendirme – 1xx
Başarılı İşlem – 2xx
Yönlendirmek – 3xx
Kullanıcı Taraflı hata – 4xx
Server Taraflı hata – 5xx

200 OK: Genelde veri listeleme sonuçları 200 ile dönüş yapılır.
201 CREATED: Veri eklendiği zaman verinin kendisi ile 201 dönülüyor.
204 NO CONTENT: Veri silindiği zaman 204 dönülüyor.
400 BAD REQUEST: Genel olarak kayıt ekleme ya da güncelleme isteklerinde gönderilen veri validasyondan geçemediyse neden geçemediği hakkında bilgiyle beraber 400 http statusuyla dönülür.
403 Forbidden: Yetkiye dayalı bir işlem yapılıyorsa bu api uç noktasında işlem yapmaya çalışan kişinin bu işlemi yapmaya yetkisi yoksa 403 status kodu döndürülür.
401 Unauthorized: Api ucunuzda bu işlemi yapmak için login olmak zorunlu ise ve apiye istek yapan kullanıcı login değil ise bu http status ile cevap verilir. Örneğin kullanıcının kendi bilgilerinin güncellemesi denilebilir.
404 Not Found: Bu http status  kullanıcının istek yaptığı url yok ise ya da url deki veri geçersiz ise bu hatayı alırız.
405 Method Not Allowed:
 Bu http status u istek yapılan api uç noktası gönderilen methodu implemente etmemiş ise bu http status unu alırız. Örneğin login olması için token verdiğimiz bir api ucumuz var ve bu uçta sadece post isteğini kabul ediyor. Kullanıcı bu api urline GET isteği yaparsa bu hatayı alır.

429 Too Many Requests: Bu http statusunu saatlik ya da dakikaklık kısıtlanan sınırdan fazla istek yaparsak bu http statusunu alırız.

Javascript Console ekranın küçük karalamalar ;)

Console ekranına geçmek için F12 tuşunun kullanabilirsiniz.

String Interpolation – Console ekranında stilli uyarılar gösterme
%s: string ifadeler
%i: integer ifadeler
%c: custom ifadeler

console.todo = function(msg) {
console.log('%c %s %s %s', 'color: yellow; background-color: black;', '–', msg, '–');
}

console.important = function(msg) {
console.log('%c %s %s %s', 'color: brown; font - weight: bold; text-decoration: underline;', '–', msg, '–');
}

console.todo('This is something that’ s need to be fixed');
console.important("This is an important message");

Liste/Array gibi değerlerin console ekranında tablo olarak gösterilmesi

var animals = [
{ animal: 'Horse', name: 'Henry', age: 43 },
{ animal: 'Dog', name: 'Fred', age: 13 },
{ animal: 'Cat', name: 'Frodo', age: 18 }
];

console.table(animals);

Timer kullanarak js performansını bulma

console.time('Timer1');

var items = [];
for(var i = 0; i < 100000; i++){
items.push({index: i});
}

console.timeEnd('Timer1');

Console temizleme
Console.Clear();

JS .min dosyalarını Unminify olarak görme
ÖR: Chrome browser için F12 tuşu ile console açılır ve soruce sekmesinden her hangi bir min.js file açılır ve pretty print butonu ile kodu düzenli bir şekilde görüntüleyebilirsiniz.

Custom Configuration Section Kullanımı

Zamanla ve kullanıcı kontrollü olarak değişebilecek olan özelliklerin configte saklanması tercih edilen hızlı bir yöntemdir.

Web.config dosyamızın içerisine, configSections elementi içerisinde sectionGroup ve section tanımlamalarını yapmamız yeterli olacaktır.

Örnek tanımlama;

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 
 <configSections>
     <sectionGroup name="serviceConnectionGroupRedis">
         <section name="Redis.ServerSettings" type="ConsoleApplication1.RedisDynamic.RedisServerSettings,ConsoleApplication1"/>
     </sectionGroup>
 </configSections>
 
 <serviceConnectionGroupRedis>
     <Redis.ServerSettings DefaultDb="0" ConnectionStringOrName="localhost:6379" PreferSlaveForRead="true" />
 </serviceConnectionGroupRedis>

 <startup>
 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
 </startup>
</configuration>

C# tarafında ise section type’ta belirlenen dosya yaratılır. Bu dosya içeriğine göre config ayarlarımız yüklenmektedir.

namespace ConsoleApplication1.RedisDynamic
{
   public interface IRedisServerSettings
   {
       bool PreferSlaveForRead { get; }
       string ConnectionStringOrName { get; }
       int DefaultDb { get; }
   }


   public class RedisServerSettings : ConfigurationSection, IRedisServerSettings
   {
       public static Lazy<IRedisServerSettings> Settings = new Lazy<IRedisServerSettings>(() => ConfigurationManager.GetSection("serviceConnectionGroupRedis/Redis.ServerSettings") as RedisServerSettings);

       [ConfigurationProperty("PreferSlaveForRead", IsRequired = false, DefaultValue = false)]
       public bool PreferSlaveForRead { get { return Convert.ToBoolean(this["PreferSlaveForRead"]); } }

       [ConfigurationProperty("ConnectionStringOrName", IsRequired = true)]
       public string ConnectionStringOrName { get { return this["ConnectionStringOrName"] as string; } }
  
       [ConfigurationProperty("DefaultDb", IsRequired = false, DefaultValue = 0)]
       public int DefaultDb { get { return Convert.ToInt32(this["DefaultDb"]); } }
   }
}

Daha sonra istenilen yerde config ayarları çekilebilmektedir.

var ayarlar = ConfigurationManager.GetSection("serviceConnectionGroupRedis/Redis.ServerSettings");
//veya statik olarak type göre tanımlama yaptıysak aşağıdaki şekildede ayarlarımızı alabiliriz.
var ayar = RedisServerSettings.Settings.Value;

Kalite Güvence (QA) & Kalite Kontrol (QC)

Günümüzde de halen birçok yöneticinin ve profesyonelin birbirine karıştırdığı iki kavram. Birçok kurumda, hem departman, hem de pozisyon isimlendirmesinde birbirinin yerine kullanılan ancak birbirinden farklı olup, birbirini etkileyen iki kavram; Kalite Güvence ve Kalite Kontrol. Gelin bu kavramları yerli yerine oturtalım ve bundan sonra doğru yerde doğru olanı kullanalım.

Bu çerçevede önce iki kavramın odağını, hedefini, sonra da istatistiki araç ve tekniklerin bu kavramlar çerçevesinde nereye oturduğuna bakalım.

Kalite Güvence (QA), ürünün ortaya çıkarıldığı sürece odaklanarak hataların önlenmesini sağlamaya çalışır. Kalite Güvence (QA), proaktif bir kalite sürecidir. Kalite Kontrol (QC) ise, tamamlandığı iddia edilen üründeki hataları bulmaya odaklanır. Bundan dolayı, Kalite Kontrol (QC) reaktif bir kalite sürecidir.

İkinci olarak, iki kavramın hedeflerini karşılaştıralım. Kalite Güvencenin (QA) hedefi ürün üretilirken hataların ortaya çıkmasını engellemek için, geliştirme ve test süreçlerini iyileştirmektir. Kalite Kontrolün (QC) hedefi ise ürün üretildikten sonra ve piyasaya sunulmadan önce, ürün dahilindeki hataları ortaya çıkarmaktır.

Üçüncü olarak, Kalite Güvence (QA) ve Kalite Kontrolde (QC) kullanılan istatistiki tekniklere odaklanalım. İstatistiki araç ve teknikler hem Kalite Güvence (QA) için, hem de Kalite Kontrol (QC) için kullanılabilir. Bu araç ve teknikler, süreçlere (süreçlerin girdilerine & operasyonel parametrelere) uygulandığında, buna İstatistiki Süreç Kontrolü (SPC) denir ve Kalite Güvencenin (QA) bir alt konusu haline gelir. İstatistiki araç ve teknikler, tamamlanmış ürünler üzerinde kullanıldığında (süreç çıktıları), İstatistiki Kalite Kontrol (SQC) olarak adlandırılır ve Kalite Kontrolün (QC) bir alt konusu haline gelir.

Kalite Güvence (QA), kalite problemlerinin dokümantasyonu da kapsayan planlı ve sistematik aktiviteler yoluyla önlenmesidir. Kalite Kontrol (QC) ise, ürün kalitesini koruyabilmek için yürütülen aktiviteler ve kullanılan tekniklerdir.

Kalite Güvence (QA), iyi bir kalite yönetim sistemi oluşturarak, bu sistemin yeterliliğinin değerlendirilmesi, operasyonel sistemin bu kalite sistemine uygunluğunu denetleyerek ve kalite yönetim sisteminin kendisini de gözden geçirilerek gerçekleştirilir. Kalite Kontrol (QC) ise, müşterilerin gerekliliklerinin sürekli olarak karşılandığını garanti altına almak hedefiyle araç ve teçhizat kullanarak kalite problemlerinin kaynaklarının bulunması ve ortadan kaldırılması yoluyla gerçekleştirilir.

Kalite Güvence ve Kalite Kontrol arasındaki fark, üretim sektöründe çok daha net biçimde tanımlıdır. Bu kavramları, sonradan üretim sektöründen öğrenen diğer sektörlerde genellikle iki kavram birbirinin yerine kullanılmaktadır. Örneğin Bilgi Teknolojileri sektöründe, yazılımdaki hataların bulunmasını ve düzeltilmesini sağlayan profesyoneller için halen QA kelimesi tercih edilmektedir. Oysa ki, QA ancak geliştirme sürecinin iyileştirilmesine odaklanır. Yazılımdaki hataların bulunması ve düzeltilmesi QC konusudur.

Bir otomobil fabrikasına gittiğimizde aslında iki kavram arasındaki farkı çok daha net görürüz. Kalite Güvence (QA) Departmanı, Kalite Kontrol (QC) Departmanına nispeten üretime daha uzak bir yere konumlandırılmıştır. Kalite Güvence (QA) Departmanına girdiğinizde, duvarlarda süreç haritaları ve süreç iyileştirme noktalarına ait post-itler görürüz. Kalite Kontrol (QC) Departmanı ise doğrudan üretim hatlarının sonunda yer alır. “Son dönemde ürünlerimizdeki hatalar nerede yoğunlaşıyor?” sorusunun cevabını ilk alacağımız yer Kalite Kontrol (QC) departmanıdır. Bu bilgi Kalite Kontrol (QC) Departmanından, süreçlerin tekrar gözden geçirilmesi ve süreçlerin iyileştirilmesi için Kalite Güvence (QA) Departmanına sonradan iletilir.

Sonuç olarak, Kalite Güvence kavramı süreçlerin kalitesinin artırılması yoluyla nihai ürünün kalitesini iyileştirmeyi hedefler. Kalite Kontrol ise, sonuca odaklanır ve üretilmiş ürünün üzerindeki hatları bulmaya odaklanır.

Alıntıdır, Dinçer Özturan’a teşekkürler…

https://www.linkedin.com/pulse/20140804122756-6232328-kalite-g%C3%BCvence-qa-kalite-kontrol-qc

Visual Studio Publish exclude etme(publishte klasör ve dosya gizleme)

Bazen publish esnasında tüm dosyları canlıya geçerken hepimizin yaptığı gibi webconfig gibi db adreslerimizi ve bazı local ayarlarımızı gösteren dosyaları yanlışlıkla servera kopyalayabiliriz. Bu durumun önüne geçmek için publishten config dosyalarını gizleyebiliriz. Bunun için aşağıdaki gibi Visual Studio Projesi içerisinde\Properties\PublishProfiles\projeadi.pubxml dosyasını düzenleyebiliriz.

 

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
.......
<!--publish ile çıkarılmaması istenilen klasörleri buraya ; ile yazabiliriz -->
<ExcludeFoldersFromDeployment>Folder1;Folder2</ExcludeFoldersFromDeployment>
<!--publish ile çıkarılmaması istenilen dosyaları buraya ; ile yazabiliriz -->
<ExcludeFilesFromDeployment>LocalConnectionStrings.config;</ExcludeFilesFromDeployment> 
</PropertyGroup>
</Project>

WSDL(Web Services Description Language) Nedir ?

WSDL, XML tabanlı web servisleri tanımlamak ve yerini belirtmek için tanımlanmış dildir. WSDL, W3C standardıdır. Bir anlamda dağıtık programlamada kullanılan IDL’e (Interface Definition Language – Arayüz Tanımlama Dili) benzer. Web servisi tanımlı işlemler, giren ve çıkan mesaj formatları, ağ ve port adresleri gibi bilgileri tanımlar. Bir web servisi tanım belgesi aşağıdaki temel elemanları içerir:
Types: mesajlarda kullanılacak veri tiplerini belirtir.
Message: İletişimde kullanılacak mesajları tanımlar.
PortType : Web servisinin içerdiği işlemleri (methods) ve ilgili mesajları tanımlar.
Binding : İşlem ve mesajlarda kullanılacak veri formatlarını tanımlar.
Port: Binding ve web adresinden oluşan servis noktasını tanımlar. Web adresi servisin çalıştırılacağı URL’dir.
Service: Kullanılan port’lar kümesidir.

SOAP(Simple Object Access Protocol) Nedir ?

SOAP, XML tabanlı uygulamalarda HTTP üzerinden bilgi değişimine izin veren protokoldür. Basitçe SOAP, Web Servis erişimi için protokoldür.
SOAP, mesaj göndermek için bir formattır.
SOAP, Internet üzerinden iletişim kurmak amacıyla tasarlanmıştır.
SOAP, platformdan ve programlama dilinden bağımsızdır.
SOAP, firewall(güvenlik duvarına) gelebilmeye izin verir.
SOAP W3C standardıdır.