2 Mayıs 2013 Perşembe

"There was an exception running the extensions specified in the config file. ---> Maximum request length exceeded." Hatası Çözümü

Büyük dosya upload ederken "There was an exception running the extensions specified in the config file. ---> Maximum request length exceeded." hatasını alıyorsanız.
web.config dosyanızda ayar yapmanız gerekecektir;

Çöüzümü:
web.config
    <httpRuntime requestValidationMode="2.0" maxRequestLength="102400" executionTimeout="2000"  />

Burada belirtilen maxRequestLength="102400" degeri ile 100 MB kadar dosyalarin upload edilebilcegini ayarlamis oluyoruz.

21 Nisan 2013 Pazar

Entity Framework ile NOLOCK Kullanımı

Büyük projelerde CRUD işlemlerinde NOLOCK kullanmadığımızda aşırı derecede performans kaybına o sorguda sonucunun geç döndürmesine yol açar.
Kısaca NOLOCK'dan bahsedecek olursak tablo üzerinde CRUD işlemi yapıldığında ilgili satırda eğer bir işlem yapılıyorsa yada TRANSACTİON başlatılıp henüz kapanmamış ise o satırı sql kilitler ve sonucu bize döndürmez.Bundan dolayı o satırı kilitlemiş olur,yani  lock olmuştur,o satırla ilgili herhangi bir sonuç döndürmez.
Böyle bir sorun ile karşılaşmak istemiyorsak tabloların yanına nolock ekleriz bu sayede ilgili satırı lock olsa bile bize sonucu döndürür.
Tsql Nolock kullanımı: SELECT *  FROM Address nolock

Entity Framework'de Nolock kullanımı biraz farklı  TransactionScope kullanarak yapıyoruz.
Entity Framework Nolock kullanımı;

//Transaction ayarlarını tanımlıyoruzç

var tsOptions = new System.Transactions.TransactionOptions();
//Transaction IsolationLevel'i ReadUncommitted yapıyoruz,burası önemli nolock işlemini tanımlıyoruz burada.
tsOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;

using (var tScope = new System.Transactions.TransactionScope(System.Transactions.
TransactionScopeOption.Required, tsOptions))
{
    using (var context = new MyEntityConnection())
    {
        //kod bloğunuz...
    }
//Transaction işlemini kapatıyoruz.
    tScope .Complete();
}

Operating system error 5: "5(Erişim engellendi.)". (Microsoft SQL Server) Hatası Çözümü

Sql server'da database attach ederken eğer Operating system error 5: "5(Erişim engellendi.)" bu hatayı almanızın sebebi,dosyaya Sql Server'in yetkisi olmamasından dolayı kaynaklanır.
Çözümü;
Sql Server sağ tıklayıp yönetici olarak çalıştırdığınızda,database attach edebilirsiniz.

21 Mart 2013 Perşembe

1. Azure'da Web Site Uygulama Geliştirmek


Bir bulut'tur gidiyor,tabi bulut nedir ilk önce biraz ondan bahsedelim :) Uygulamalarımızın sistem üzerinde herhangi bir kuruluma ihtiyaç duymadan erişilebilen bir web platformudur.Platform bağımsız İnternet'in olduğu her yerden erişebilirsiniz.Bulut platformunu birçok şirket sunmaktadır,tabi biz .Net ortamında uygulama geliştirdiğimiz için Azure Platformunda üzerinde işlem yapacağız.
Azure üzerindeki servislerden biraz bahsedecek olursak,sunucu barındırmadan web sitelerini yönetebileceğimiz servisler,Azure Sql Server,mobil servisler ve birçok servisleri mevcuttur.
Azure'da Paas,İas ve Web site olarak uygulama geliştiriyoruz,bu makalemde web site üzerinde uygulama geliştirmeyi göstereceğim.


Evet şimdi Azure'da uygulama geliştirmeye geçebiliriz.

İlk olarak adresten Azure Sdk'yi yüklüyoruz.Azure Sdk Download

1.File > Web Site oluşturuyoruz veya mevcut web sitenizi açabilirsiniz.Boş bir sayfaya "Merhaba Azure" yazdım sadece.





2.Azure Manage ekranını açalım;
Web site > Create Web site dedikten sonra aşağıdaki ekran açılacaktır.
3.url adresine web sitenin görüneceği adresi yazıyoruz ve create ettikten sonra web site 1-2 dk içinde hazır hale geliyor.
4.web site sekmesinde oluşturduğumuz web site uygulamasını tıklıyoruz,buradan Dashboard sekmesini açıyoruz,açılan ekranda sağ tarafta "Download Publish Profile" link adresinden publish dosyamızı indiriyoruz.
5. Visual Studio tekrar dönerek web site projemizde sağ tık."Publish Web Site" açtıktan sonra import'u tıklayıp,indirdiğimiz publish dosyasını tıklıyoruz

6.publish ettikten sonra  web sitenize açabilirsiniz.
İşte bu kadar basit :) 

Bir sonraki makalemde Paas(platform as a service )'dan bahsedeceğim.

10 Mart 2013 Pazar

"HTTP Error 500.19 - Internal Server Error" Hatası Çözümü








"HTTP Error 500.19 - Internal Server Error" Hatası İİS'deki ayarlardan kaynaklanıyor.Bende handlers sekmesinde hata vermiş.
Çözümü:
Başlat > Çalıştır "%windir%\system32\inetsrv\config\" yazıyoruz açılan dizinden,

 applicationHost.config dosyasını açıyoruz.
            <section name="handlers" overrideModeDefault="Deny" />














"Deny" yi "Allow" yapın.hatanız düzelecektir.



6 Mart 2013 Çarşamba

"At least one web, worker or virtual machine role is required but none could be found" Hatası Çözümü

Eğer mevcut web projenizi Azure projesi ile birleştirmek istiyorsanız "At least one web, worker or virtual machine role is required but none could be found " bu  hatayı alma ihtimaliniz yüksek.

Çözümü:
Hata açıklaması azure'da çalıştıracağım role yok ,rol eklemeniz gerekir diyor.
Azure Projesinde > Roles > Sağ Tık> Add > burada iki seçeneğimiz var, mevcut projeniz ekliyecek ise (Web Role Project in solution) seçiyoruz yeni web site oluşturacak isek (New Web Role Project) seçmeliyiz.

Biz "Web Role Project in solution" seçtikten sonra Aşağıdaki gibi  ekranda proje içerisine dahil ettiğimiz site'ler çıkar.Açılan pencereden web site projesini seçtikten sonra tamam diyoruz.



Ekledikten sonra aşağıdaki gibi Roles Klasörünün altına web projemizi atar.


Projeyi build ettiğimizde hatadan kurtulmuş olacaksınız.


Unrecognized attribute 'xmlns:xdt'. Note that attribute names are case-sensitive. Çözümü

Mevcut Web Sitenizi Azure projesine attığınızda eğer bu "Unrecognized attribute 'xmlns:xdt'. Note that attribute names are case-sensitive." Hatayı veriyor ise,"obj" klasörünü projeden exclude edin yada o klasörü silerseniz hata vermeyecektir.

5 Mart 2013 Salı

Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property. Hatası

"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property." Hatasının çözümü:

Genelde Json'dan dönen değerin limiti ile ilgili bir hatadır.Default Değeri 4 MB olduğu için yukarıdaki hatayı verecektir,bu hatanın çözümü için web.config dosyamıza aşağıdaki kodu yazalım.

<configuration>
   
<system.web.extensions>
       
<scripting>
           
<webServices>
               
<jsonSerialization maxJsonLength="60000000"/>
           
</webServices>
       
</scripting>
   
</system.web.extensions>
</configuration>

Burada json'den dönen değerin uzunluğunu arttırmış olduk.

6 Şubat 2013 Çarşamba

Index’lerin fragmentation değerlerini öğrenmek

İndexlerimizin fragmentation yani bozulan oranları öğrenmek için aşağıdaki kodu T-sql'de çalışıyoruz.

Use ademcinar
GO
SELECT
      ps.object_id,
      i.name as IndexName,
      OBJECT_SCHEMA_NAME(ps.object_id) as ObjectSchemaName,
      OBJECT_NAME (ps.object_id) as ObjectName,
      ps.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') ps
INNER JOIN sys.indexes i ON i.object_id=ps.object_id and i.index_id=ps.index_id
WHERE avg_fragmentation_in_percent > 5 AND ps.index_id > 0
ORDER BY avg_fragmentation_in_percent desc




Çıkan sonuçta avg_fragmentation_in_percent değeri %30'dan büyük ise indexleri rebuild ile düzeltebiliriz.Eğer %30'dan küçük ise reorganize ile düzeltebiliriz.
Bir sonraki makalede indexrebuild ve reorganize işlemlerini anlatacağım


INSERT statement failed because data cannot be updated in a table with a columnstore index. Consider disabling the columnstore index before issuing the INSERT statement, then rebuilding the columnstore index after INSERT is complete

"INSERT statement failed because data cannot be updated in a table with a columnstore index. Consider disabling the columnstore index before issuing the INSERT statement, then rebuilding the columnstore index after INSERT is complete" Hata Çözümü

Bu Hata ColumStore İndex yapısını kullandığımız indexlerde karşımıza çıkar, sebebi ColumStore indexlerde insert,update ve delete işlemi yapmanıza izin vermez.insert yapıcağımızda ColumStore indeximizi disable yapıp insert yapabiliriz,insert işlemi bittikten sonra tekrar rebuild yapabiliriz. Aşağıdaki Örnekteki Gibi.

Çözümü ise;
--indexi disable ettik
alter index NCColumnStoreIndex-Test  on dbo.Kisiler disable
Go
-- kayıt ekledik
insert  dbo.Kisiler (ad,soyad) values('Adem','Çınar')
Go
--index tekrar aktif hale getirdik
alter index NCColumnStoreIndex-Test  on dbo.Kisiler rebuild
Go 

1 Şubat 2013 Cuma

Windows Phone İnternet Kontrolü

Windows Phone projelerimizde eğer İnternet üzerinden işlem yapacağımız zaman.İnternet kontrolünü mutlaka eklememiz gerek.Eklemediğimiz takdirde Store tarafından olumsuz yanıt alırız.
İnternet Kontrolü yapmak için aşağıdaki metodu ilk açılacak sayfamıza eklemeliyiz.

  if (!NetworkInterface.GetIsNetworkAvailable())
  {
   MessageBox.Show("İnternet Bağlantınızı Kontrol Ediniz...", "İnternet", MessageBoxButton.OK);
}

yukarıda GetIsNetworkAvailable metodunu çağırarak telefonda üzerinde İnternet olup olmadığını kontrol edip kullanıcıya uyarı verdik.

15 Ocak 2013 Salı

Asp.Net Url Routing Kullanımı

Bu yazımda Url Routing yapısının mimarisini ve kullanımı anlatacağım.Tabi Url routing'e geçmeden önce  Query String'den biraz bahsedelim.Query string Framework 4.0'dan önce projelerimizin vazgeçilmez veri  taşıma yöntemidir.

Örnek;
http://localhost:61802/?ID=30.11.2012
Şeklinde ID değişkenine değer yolluyorduk sonrada istediğimiz yerde değişkendeki değeri kullanabiliyoruz,Peki neden Url Routing kullanmalıyız;

  • Query String'ler sayfa aramasında indexleme işlemlerinde sorun çıkartması, Url Routing ise seo yapısı olduğu için arama motorlarında üst sıralarda, hızlı ve klasör bazlı indexleyebiliyor . 
  • Parametreler fazla oldukça işin içinden çıkılmaz hal alması. Url Routing'de belirli standartlarda yaptığımız için herhangi bir sorun çıkartmaması.
  • Query String Url'leri Kullanıcı tarafından karışık bir görüntüsü olması.

Url Routing Kullanımı
Öncelikle;
  1. New Project > Web > Asp.Net Empty Web Application ve framework 4.0 projesi olmasına dikkat ediyoruz,çünkü Url Routing framework 4.0 ile beraber geldi.
  2. Projemizde Sağ Tıklıyoruz > Add > New Item > Global Application Class(Global.asax) seçiyoruz.
  3. Global.asax dosyasını açtıktan sonra;
  4. Referance olarak aşağıdaki System.Web.Routing ekliyoruz ; 



5.Aşağıdaki gibi RouteCollection tipinden değişken alan metodu yazıyoruz bu metod urlleri register işlemi yapacak.buraya istediğimiz kadar url formatı ekleyebiliriz.







6.Sıra geldi metodu çağırmaya,metodu uygulamamız start olduğunda çağıracağız yani Application_Start metodunu kullanacağız bu metod,Uygulamamız start olduğunda ilk bu metod çalışır.
7.Url Routing işlemlerini tanımladıktan sonra nasıl kullanıcağımıza bakalım;
Sayfa İçerisinde Kullanımı

1. ilk olarak query string gibi değer atama işlemi yapalım.
 Yukarıda başlık değişkenine istediğimiz parametreyi atayabiliriz.burada dikkat etmemiz gereken nokta Türkçe karakterleri kullanmamalıyız.bunun için Türkçe karakterleri çeviren bir metoda ihtiyacınız olacak.

2.Atadığımız değerleri nasıl okuyacağımıza bakalım;
 RouteData.Values metodunu kullanarak değişkene atadığımız değeri alırız.Bu şekilde istediğimiz kadar url aracılığı ile veri taşıyabiliriz.


14 Ocak 2013 Pazartesi

WITH (NOLOCK) Hayat Kurtarır :)

NOLOCK Sql Server'da tablolarımızın kilitlenmesini(deadlock) olmasını engeller,normal şartlarda tablodaki crud işlemlerinde, örnek: update sorgudan cevap dönene kadar tabloyu lock(deadlock) eder başka bir işlem yapmaya izin vermez. Lock ettiği için farklı bir sorgudan değer bir önceki işlem bitmeden değer döndürmez.Bu durum orta ölçekli projelerde hissedilmese de büyük  projelerde başımızı belaya sokabilir.
Kullanımı;
select * from Customers WITH (NOLOCK)


Tablo adından sonra  "WITH (NOLOCK)" yazmamız yeterli olacaktır.fakat NOLOCK nerede kullanacağımız çok önemli buna çok dikkat etmeliyiz,eğer anlık işlemler çok ise NOLOCK kullanmanız bize avantajdan ziyade dezavantaja dönüşebilir.
Örnek verecek olursak E-ticaret sitesinden bir ürünü iki kişiye satma ihtimaliniz yüksek çünkü tabloyu lock etmediğiniz için birden çok kişi aynı ürünü satabiliriz.Tabi bu işlemleri "TRANSACTION" ile yapabilirseniz bir sıkıntı yaşamazsınız.

9 Ocak 2013 Çarşamba

EntitySet'i güncelleştirilemiyor çünkü bir DefiningQuery'si var ve öğesinde geçerli işlemi desteklemek için hiçbir üyesi mevcut değil.

 "EntitySet'i güncelleştirilemiyor çünkü bir DefiningQuery'si var ve <ModificationFunctionMapping> öğesinde geçerli işlemi desteklemek için hiçbir <UpdateFunction> üyesi mevcut değil." Hatası ile karşılaştıysanız.
Çözümü:insert veya update yaptığınız tabloda primary key olmamasından dolayı böyle bir hata almaktadır.tabloya primary key eklerseniz düzelecektir.