Archive for the ‘C#’ Category

Silverlight 2.0 ve Web Servisleri

Posted by Arda under .NET, C#

Basit bir web uygulamasında, web site projesi vardır yanında da refereans verilmiş diğer projeler(veri katmanı,iş katmanı,servis katmanı….) Silverlight uygulamalarında bu biraz farklı. Daha doğrusu mantık aynı, yaklaşım farklı.

Silverlight, bir web uygulamasında kullanıcı arayüzü seviyesinde olan bir kavram. Buna göre kendi içinde veri ile ilgili işlerin olması,bir servis sunması çok da tercih edilen ya da beklenen bir şey değil. Bundan dolayı zaten Silverlight Application’ı açtığınız zaman, VS 2008′de referans olarak yapmış olduğunuz data katmanını(CLR .dll’i mesela) ekleyemezsiniz.

Peki arayüz katmanım,uygulamanın diğer parçalarından nasıl haberdar olacak?

Burada servis katman(lar)ı ortaya çıkıyor. Arayüz katmanı, servis katmanını referans kullanarak uygulamayı kullanıcıya sunuyor.Web servisini çağırmanın iki yolu vardır. Bir senkron olarak,bir de tabi ki asenkron olarak. Genellikle senkron olarak çağırılırdı web servisleri, Ajax hayatımıza girdikten sonra asenkron yaklaşım da önemini arttırdı,hatta kullanım olarak öne bile geçiyor. Silverlight’da tüm web servisleri asenkron olarak çağırılır.Kavram olarak bu şekilde ifade etmek pek doğru olmasa da kaba tabir ile Silverlight’da ajax desteği sağlanmış bu şekilde  diyebiliriz.Tabi ki bu v2.0 için.

Silverlight vs. Cross-Domain İletişim

Normal ASP.NET tasarımlarında www.minepla.net deki bir uygulama www.abc.com/WebService.asmx(.svc) şeklinde bir web servisini kolaylıkla çağırabilmekteydi. Ya da www.abc.com’de ki bir script’i… Bunun sonucunda ne olabiliyordu? XSS(cross-site scripting) saldırıları…Ve bu sayede www.abc.com’daki kötü niyetli bir script, www.minepla.net’de ki bir açıktan dolayı o sitedeki bilgilere ulaşabiliyordu. Silverlight’da bu olay böyle değil.Tehlikenin farkında olan Microsoft, Silverlight uygulamasından direk olarak başka bir domain’deki kaynağa ulaşmayı engelliyor. Flash uygulamalarında da aynı mantık var.(Tehlikenin ilk farkında olan Adobe olmuş yani  )

Başka bir yerde host edilen web servis’i çağıramıyorsam ne anladım ben bu işten…Ama tabi ki böyle değil.”clientaccesspolicy.xml” diye bir dosya ile,ki bununla ilgili ayrıntıyı buradan okuyabilirsiniz, web servise kimler erişebilecek belirtebiliyoruz.Bu dosyayı web servisi host eden server’ın root’una koyunca Silverlight uygulamamız artık web servisini çağırabilir hale geliyor.

Mekanizma nasıl işliyor tam bilemiyorum, ama tahminim ve mantıklı gelen, Silverlight uygulaması önce bir HTTP GET yapıyor ve dosyaya bakıyor,sonra web servise request yapıyor sanırım.

Sonuç olarak çok da sağlam olmasa da güvenlik adına güzel bir olay.

Bir çok uygulamada, web veya windows fark etmeksizin, bazı iş gereksinimlerinden dolayı belli bir rutinde bazı işlemler yapmak gerekir. Hatta olmazsa olmaz gereksinimlerden biridir. Peki bu rutinleri oluşturmak,yönetmek nasıl oluyor ya da olacak?
Windows Service yazarak bu tip işleri yapmak sanırım ilk akla gelen ve sıklıkla yapılan şey. Doğruluğunu bir kenara atarsak, bu tarz işlerin önceden böyle yapılıyor olması ve bir şekilde düzgün işliyor olması geliştiricileri de windows servisi yazmaya yönlendiriyor.Tabi ki gereksinim ve tasarımlara göre başka yollarda düşünülmüyor değil ama belli bir rutin içerisinde yapılacak bir iş gereksinimi geldiği zaman, doğruya doğru ilk akla gelen windows servis yazmak oluyor. En azından benim gözlemlediğim.
Bir senaryo üzerinden gidelim. Basit bir iş uygulamamız var diyelim. Kullanıcı etkili ya da kendi çapında bir şeyler yapıyor işte. Yapılan işlemlerin sonucunda belli zamanlarda rapor almak istiyoruz; dosya ya yazma,grafik oluşturma .vs gibi.Gayet standart bilindik bir senaryo.

İlk akla gelen yöntem bir windows servis yazmak olur sanırım. %80’lik bir kısımın ilk düşüneceği şeyin bu olduğuna eminim, ki benim de ilk aklıma bu gelirdi. Doğru da aslında, bir windows servis ile bu olay istenilen şekilde çözülebilir.Timer,DateTime ya da user-desinged object’ler ile bir şekilde yapılır.Ama sistem performansını etkileyen,arka planda sürekli çalışan,bir şeyler sayan,yapan,kontolü zor olan bir olay olacaktır bu.Operasyonel maliyeti diğer alternatifleri ile karşılaştırıldığında da mantıklı bir değer mi olur bilemem ama bu senaryo için bence olmaz.
Read the rest of this entry »

ADO.NET Entity Framework Beta 3 çıktı. Buraya tıklayarak indirebilirsiniz.Bir önceki versyona göre baya bir değişiklik var;

 

 

Performance improvements

  • Much quicker object query execution
  • Simpler generated SQL
  • Faster view generation
     

Easier disconnected operation

  • ApplyPropertyChanges
  • Public, serializable EntityKey property on EntityReference
  • Attach on EntityReference
  • Improvements to EntityKey serialization
     

Extensibility and business logic enhancements

  • Partial methods in code generation for property changing and property changed events
  • Load with MergeOption
  • AssociationChanged Even

Query improvements

  • Additional canonical functions for LINQ to Entities
  • Apply operator elimination (makes more operations work in SQL Server 2000 and other databases)
  • Compiled LINQ query
  • ToTraceString() method on ObjectQuery and EntityCommand to facilitate debugging

Other

  • Provider interface allows better reasoning about primitive types
  • Connection management refinements

 

 

Peki bu Entity Framework ne?

Microsoft, .NET Framework 3.5 ile O/R Mapping olayına ciddi anlamda girmiş oldu. Entity Framework’de bu girişimin en somut örneği. Database’de bulunan tabloların 1:1 şeklinde kod tarafına yansıtılması LintToSql’in bize sağladığı,yani var olan bir şeydi zaten. Ama Entity kavramı uygulama açısından ve business logic açısından her zaman database’deki tablolar olmayabilir.

Şöyle ki; Veritabanımızda Kişi,Siparişler ve Adres şeklinde tablolar olsun. Business açısından da müşteri kavramı Kişi,Sipariş ve Adres özelliklerine sahip bir yapı olsun. Normalde böyle bir şeyi yapmak çok zor değil ancak hamal kod( :) ) diye adlandırabileceğim yazılımcıyı bir süre sonra sıkan kodlar yazmak gerekli. Entity Framework bizi bunlardan kurtarıyor. Ve ister istemez bir şekilde veritabanındaki yapıya ve şemasına bağlı olmak zorunda kalıyorduk. Aslında kötü bir şey değil bu ama farklı ihtiyaçlar için elimizi kolumuzu bağlıyordu.Kısaca ADO.NET Entity Framework’ü, veritabanı odaklı uygulama modelleri yerine uygulama odaklı veri modelleri oluşturmamızı sağlıyor.

Ayrıca Attribute kavramları ile yarattığınız kendi entityleri veritabanında tablo şeklinde oluşturabiliyorsunuz.Bu az önce dediğim uygulama odaklı veri modelleri oluşturmak kavramının bir parçası.
 
Visual Studio 2008′e yüklenen bir tool ile entity tasarımı yapmak oldukça basit ve eğlenceli bir hal alıyor.Üşenmezsem bir sonraki yazılarımda Visual Studio 2008 ile nasıl bu bahsetmiş olduğum şeyleri gerçekleştiriyoruz anlatacağım. (:

Daha geniş bilgileri aşağıdaki adreslerden temin edebilirsiniz…
http://msdn2.microsoft.com/en-us/library/aa697427(VS.80).aspx

Volta      Microsoft Live Labs, çok katmanlı web uygulamaları geliştirmede, geliştiriciye kolaylık sağlaması açısından yeni bir yaklaşım ile karşımıza çıkıyor. Bir web uygulamasını, çok katmanlı bir mimarinin web tarafındaki kullanıcı arayüz katmanı olarak düşünebiliriz aslında. Bundan dolayı çok katmanlı web uygulamaları konsepti ne kadar anlamlı tartışılır. Ama gelişen teknoloji ve büyüyen internetten dolayı standart “application” kavramının yavaş yavaş “web application” kavramına dönüşmesi sanırım bu olaya biraz açıklık getirir. Çok dağılmadan Volta’ya geri dönelim.
Volta aslında bir çeşit derleyici ve kütüphane. MSIL kodunun tekrar derlenmesi ile uygulamanın client ve server için gerekli olan kısımlarını oluşturuluyor, ilgili web servis iletişimlerini oluşturup bunların güvenliklerini sağlıyor. Çok karmaşık gibi gelse de, aslında geliştirmesi oldukça kolay bir ortam sunuyor Volta bize.
Peki bunları nasıl yapıyor? Refactoring,retargeting ve remodulating şeklinde 3 aşamada bütün bunlar oluyor.
Refactoring;  Tek katmanlı uygulamanızı, dağıtık mimari için uygun hale getiren aşama bu. Tek katmanlı bir uygulama nasıl oluyorda dağıtık bir mimariye dönüşüyor? Ne kadar mantıksız? Banada ilk başta bu şekilde mantıksız gelmişti. Ancak daha sonraki araştırmalarımda Volta’nın uygulama geliştirme yaklaşımı, tek katmanlı bir yapı düşünerek geliştirmeyle başlamaya dayanıyor. Yani uygulamanızı geliştirirken uygulamayı bir .NET client uygulaması olarak geliştirmeye başlıyor, geliştirme aşamasında client ve serverda olacak kısımları belirtebiliyorsunuz. Refactoring aşaması bu olayı gerçekleştiriyor. Yani aslında bu şekilde mimarinizi sonradan “refactor” etmiş oluyorsunuz. İşte Volta’nın ortaya çıktığı nokta da bu aslında. Mevcut mimarinizi bozmadan ama etkin kullanım için geliştirmek.
Retargeting; Bu aşamada MSIL kodundan, Javascript kodları yaratılıyor. Bu sayede server-client ilişkisi .NET Framework’nün sağladığı imkanlar ile güçleniyor. Ajax bu güçlerden birine örnek.
Remodulating; Web uygulamaları geliştirirken, çeşitli browser’lara göre bazı şeyleri düşünmek gerekir.Kimi javascripti desteklemez,kimi desteklese de bir yerde patlar…Remodulating aşamasında Volta sizin için bunları düşünüyor ve gerekli düzenlemeleri kendi ayarlıyor.Şu aşamada sadece IE ve Firefox desteği var ama ilerleyen sürümlerde diğer browser destekleride olur herhalde.
Volta yaklaşamı ile uygulama geliştirebilmek için Visual Studio 2008 ve .NET 3.5 Framework’ü bilgisayarınızda yüklü olmalı. http://labs.live.com/volta/ adresinden indireceğiniz dosyayı kurtuktan sonra Visual Studio 2008’de Volta uygulamaları geliştirmek için çeşitli template’ler çıkacaktır.
Bir sonraki yazı da Volta ile ilgili basit bir örnek ile bütün bu yukardaki kavramları biraz daha somutlaştırmaya çalışacağım.
Volta: http://labs.live.com/volta

WPF ve DataBinding

Posted by Arda under .NET, C#, Coding

.NET Framework 3.0 ile beraber gelen alt bileşenlerden Windows Presentation Foundation uzaktan güzel gözüksede sanırım uygulama geliştirme aşamasında bir çok yazılım uzmanını zorlayan yapılardan biri. Bunun öncelikli nedenleri, henüz stabil bir uygulama geliştirme platformunun tam olarak sunulmaması ve dökümantasyonun yeterli olmaması gösterilebilir sanırım. WPF vizyonu yaygınlaştıkca dökümantasyon olayınında gelişeceğine inanıyorum.
 
Bu yazımda WPF’da databinding işlemlerinden bahsedeceğim. Önceki framework versiyonlarından farklı bir yaklaşıma sahip olan databinding işlemleri WPF’da gerçekten oldukça karışık. Bunun nedenlerinden biri kontrolleri bir birleri ile iç içe kullanabilme özelliğinin ve her bir kontrolü özelleştirme esnekliliğinin çok gelişmiş olması desem yanılmış olmam. WPF’da bir listbox’ın içine koyacağınız düğme üzerine tıklandığı zaman bir combobox’ın çıkıp,elemanlarını değişik türlerde gösterebilme esnekliği, geliştirme aşamasında baya zorluyor.

Bu yazı ile bu WPF’de kontrollere databinding nasıl yapılır giriş seviyesinde bunu anlatacağım. Yazının biraz daha net anlaşılması için XAML kavramı ve .NET Framework 3.0 konseptine yatkınlın sanırım gerekli olacaktır. Yapacağım örnek, bir combobox’ı database’den gelen bilgiler ile nasıl doldurabilir ve combobox’ın elemanlarını nasıl özelleştirebiliriz bunu gösteren basit bir uygulama olacak.

Read the rest of this entry »

Ajax Extensions 1.0 ile gelen ve sanırım en çok kullanılan kontrol olan UpdatePanel’den biraz bahsetmek istiyorum. Kendi yaptığım uygulamalarda oldukça sık kullanıyor olmam böyle bir yazı yazmam için beni tetikledi. Tetikledi derken, trigger mantığından da biraz bahsedeceğimi söylemek isterim. Bu yazıda basit bir UpdatePanel örneği ve bu UpdatePanel’i dışarıdan başka bir kontrol ile nasıl tetikleriz bundan bahsedeceğim. Umarım bir şekilde işinize yarayan bir şeyler olmuşmasını sağlar. Yapacağımız şey oldukça basit bir örnek olacak; RadioButtonList’den seçtiğimiz elemanlara göre UpdatePanel içindeki ASP.NET kontrolünü güncelleme.
Read the rest of this entry »