Category Archives: .NET

WPF/E ‘DEN SILVERLIGHT ‘A GEÇİYORUZ

silver.gifBir süre önce blogumda hafiften eleştirdiğim WPF /E (WINDOWS PRESENTATION FOUNDATION / EVERYHERE) artık isim değiştirerek Silverlight oldu. Ürüne ait yeni bir sayfa oluşturularak bu teknolojiye verdikleri önemi de ortaya koymuşlar.

Ürün sayfasını ziyaret ederek tanıtım amaçlı bulunan videoyu izleyebilirsiniz. Yine aynı şekilde downloads kategorisinde Silverlight uygulamalarını çalıştırabilmek adına gerekli pluginleri yada uygulama geliştirmek için gerekli sdk ve örnekleri bulabilirsiniz. Ayrıca site 30 Nisan ‘dan itibaren Silverlight ile makyajlanacak yani o tarihte yeniden ziyaret etmekte fayda var diye düşünüyorum.

Silverlight (WPF/E ) nedir diye soranlar için de WPF ‘in light sürümüdür diyebilirim. Microsoft ‘un .NET Framework 3.0 ile yayınladığı bu yeni kütüphane sayesinde görselliği iyice arttırılmış uygulamalar geliştirmek artık mümkün. WPF , .NET Framework 3.0 gerektirirken light versiyonu olan Silverlight (WPF/E)gerektirmiyor bu sayede tüm platformlarda (cross- platform) çalışabildiği iddia ediliyor.

Fakat downloads bölümünü ziyaret edenler göreceklerdir ki Windows ve MacOS için plugin bulunurken Linux ailesi için iş üçüncü parti firmalara bırakılmış. İnternet üzerinde biraz araştırma yapmama rağmen herhangi bir Linux eklentisine de rastlamadım. Yani şu anda Silverlight kullanarak hazırlayacağınız web uygulamaları dünyadaki XX milyon Linux kullanıcısı tarafından erişilemeyecek. Bu durum biraz düşündürücü açıkcası.

Bu arada Microsoft ‘un görsellik konusunda bu kadar ileri gitmesi Macromedia ‘yı da alan Adobe ‘yi iyice kızdırdı. (Bakın kızmış bir arkadaş mesela ) WPF ve Silverlight ile uygulama geliştirme aracı olan Expression ürün ailesine CS3 serisiyle cevap veren Adobe (Mutlaka CS3 ‘lere göz atın) kısa bir süre sonra da WPF ‘e  APOLLO ile cevap vermeye hazırlanıyor.

Artık bekleyip göreceğiz. Bu görsellik savaşı bizleri nerelere götürecek açıkcası ben de merak ediyorum. Tahminimce JAVA dünyası bu gibi işlerden uzak durup işin business kısmına ağırlık verecektir. Şimdilik benden bu kadar. Bir sonraki yazıya kadar sağlıcakla kalın…

BUSINESS INTELLIGENCE SEMİNERİ

bi.jpgHer ne kadar CETURK ‘te duyurusunu yapmış da olsak , blogumu takip edenleri de 20 Nisanda gerçekleştirilecek olan Business Intelligence Seminerinden haberdar etmek istedim.

Konuşmacı olarak Aykut Taşdelen ‘in geleceği seminerde Business Intelligence ‘a paralel olarak Data Mining, OLAP, Data WareHousing ve Raporlama gibi konulara da değinilecektir.

20 Nisan 2007 saat 15:15 ‘de Yıldız Teknik Üniversitesi ‘nde gerçekleştirilecek olan bu seminerde blog okuyucularımı da görmek güzel olcaktır. Müsait olanlar buradan kayıt yaptırabilirler.

NOT: Etkinlik sonunda çekilişle 2 katılımcıya Aykut Taşdelen ‘in kitapları hediye edilecektir.

ASP.NET AJAX SEMİNERİ ve BİRKAÇ ÖNEMLİ SÖZ

ajax.pngGeçen hafta perşembe günü Nedir?TV tarafından düzenlenen ASP.NET AJAX seminerindeydim. Semineri Nedirtv.com ‘un topluluk lideri ve kurucusu Uğur Umutluoğlu verdi.

Bir ara blogumda tüm seminer notlarımı yazmayı düşündüm ama Umut Bey blogunda zaten sunumu ve örnek kodları paylaştığı için link vermem yeterli olur diye düşünüyorum. (Böyle dediğime bakmayın yine bir sürü şey yazacağım )

Ama yine de seminerde değindiğimiz bir kaç öenmli noktaya değinmem gerekiyor. Örenğin: Microsoft ‘un ASP.NET AJAX kütüphanesi WPF ,Web Servisi gibi ve ASP.NET 2.0 ile sorunsuz çalışırken ASP.NET 1.1 ve 1.0 ile çalışamamaktadır.

Seminer sırasında standart AJAX kontrolleri olan ScriptManager, ScriptManagerProxy, Timer , UpdateProgress ve Update Panel bileşenleri üzerinde durduk.

ScriptManager ile ilgili olan ve sunumda yer almayan en önemli madde de MasterPage kullandığımız durumlarla ilgili. Eğer sayfanızı bir MasterPage ‘den türetiyorsanız sadece MasterPage ‘de ScriptManager olması yeterli çünkü her sayfada bir tane ScirptManager yeterli oluyor. Bu arada tüm kontrollerden üstte olasına dikkat edin ScriptManager ‘ın.

UpdatePanel ile ilgili olarak da UpdateMode özelliğini Always yaparsanız sayfadaki bütün tirggerlardan etkilenir. Eğer böyle bir durumla karşılamak istemiyor ve sadece sizin istediğiniz triggerler sonucu güncellenmesini istiyorsanız UpdateMode özelliğini Conditional yapın.

UpdatePanel ‘in bir diğer önemli özelliği ise ChildrenAsTrigger özelliğidir. Burada children ile içerisindeki kontroller kastedilmiştir. Yani bu özellik True iken içerideki herhangi bir kontrolün oluşturacağı postback ile UpdatePanel otomatik olarak güncellenir. Bu gibi durumların önüne geçmek için de bu özelliğini False yapmalısınız. UpdatePanel ‘in güncellenmesini kontrol altına almanın en güzel yanı Trigger özelliğine (Collection yapısındadır) AsyncPostBack Trigger eklemektir.

Bir diğer önemli kontrolümüz olan UpdateProgress ile de bir UpdatePanel güncellenirken kullanıcıya “yükleniyor…” , “bağlanıyor…” gibi görseller sunabilirsiniz. Burada AssociatedUpdatePanel özelliği ile hangi UpdatePanel güncellendiğinde görüntüleneceğini belirtmeniz gerekecektir. (Properties penceresinde muhtemelen bu özelliğe ait dropdownlist çalışmayacaktır o nedenle boş yere beklemeyin ve ilgili UpdatePanel ‘in ID’sini kendiniz yazın). Ayrıca DisplayAfter (ms) özelliği ile de ne kadarlık bir süre sonra gösterileceğini belirleme şansınız var. UpdateProgress ‘i ilgili UpdatePanel içerisine koyarak da otomatik olarak ilişkilendirilmesini sağlayabilirsiniz.

AJAX kontrollerinden Timer kontrolü ile de bir UpdatePanel ‘in belirleyeceğiniz süre (Interval değerini belirleyerek) otomatik olarak güncellenmesini sağlayabilirsiniz. Yukarıda belirttiğim gibi UpdatePanel ‘e trigger olarak eklemeniz yeterli olacaktır.

Sunumu da dikkatlice incelerseniz sanırım ASP.NET AJAX kontrollerini yavaş yavaş kullanmaya başlayabilirsiniz. Fakat bu noktada bazı problemlerle de karşılabilirsiniz.

Mesela sevgili hocam Sefer Algan ‘ın blogunda bahsi geçen ; sayfada farklı UpdatePaneller içerisinde farklı UpdateProgressler varsa ve UpdatePaneller dışarıdan trigger olarak eklediğiniz bir kontrol sonucu güncelleniyorsa o zaman UpdateProgress görüntülenmiyor. Sorunun çözümü ve detaylar için bu yazıyı okumanızda fayda var.

Bir diğer sorun da web projenizi çalıştıracağınız sunucu da AJAX EXTENSIONS kurulu değilse yaşanıyor. Bu konuyla ilgili olarak Uğur Bey blogundaki bu yazı ile okuyucularına yardımcı olmaya çalışmış. Siz de bu tarz bir sorunla karşılaşıyorsanız blogdaki tartışmaya katılabilirsiniz.

Ben de bitirme projemde AJAX ile bazı ASP.NET VALIDATION kontrolllerini kullanırken sorun yaşıyorum. Tam olarak sorunun nedenini bulamadım ama özellikle de validation ard arda çalışacaksa 2. seferde uyarı vermiyor. Zaten ASP.NET validation kontrollerinde bazı kafaya göre çalışma durumları olduğunu bildiğimden pek de takmıyorum ben bu durumu :)

Seminerle ilgili verebileceğim teknik detaylar bunlar . Sıra geldi başlıkta bahsi geçen BİRKAÇ ÖNEMLİ SÖZ ‘e. Seminere yaklaşık 40 kişilik kayıt alınmasına rağmen sadece 8 kişi katıldı. CETURK etkinliklerinde de bu tarz sorunlarla karşılaştığımız için katılımın az olabileceğini düşünmüştüm ama bu kadarını ben bile beklemiyordum. Açıkcası öğrenci arkadaşların duyarsızlığı insanı hayata küstürecek cinsten. Ajax-tr yayına başladığında çok ciddi bir ASP.NET AJAX isteği gelmişti okuyuclardan. Yada AJAXNEDIR mail grununda da çoğunluk PHP ile uğraştığı için ASP.NET ile ilgili sorular hep havada kalıyordu. Bu seminer bunun için çok iyi bir fırsattı fakat insanlar kıymetini bilemediler…

Hiçbir ücret talep edilmeden düzenlenen bu tip etkinliklere rağbetin az olmasının altında NASILSA PARA VERMEDİK düşüncesi yattığını biliyorum. İnsalar 3-4 saatlik eğitimlere 100-150 gibi rakamlar ödediklerinde iki elleri kanda olsa bile gidiyorlar ama bu tarz ücretsiz ve paylaşım amaçlı etkinlikler nedense az rağbet gösteriyorlar. Bu sözlerim çalışam kesimden ziyade öğrenci arkadaşlar için. Tüm öğrenci arkdaşlardan bu gibi etkinliklere daha fazla önem vermelerini rica ediyorumve aynı zamanda tavsiye ediyorum. Sadece bilgi anlamında değil çevre yapmak ve farklı kişilerle tanışmak anlamında da bu tarz etkinliklerin getirisi fazla oluyor.

Şimdilik benden bu kadar. Bir sonraki yazıya kadar sağlıcakla kalın…

Uğur UMUTLUOĞLU Blog
Sunum dosyası
Sunumda yapılan uygulamalar

ASP.NET MEMBERSHIP ve LOGIN SORUNSALI

aspnet.pngUzun zamandan beri fırsat bulup da bir türlü kullanamadığım ASP.NET Login kontrollerini bu sabah 7:30 gibi denemeye karar verdim. Hevesle bilgisayarın başına oturup elimdeki kaynakalardan bir kaç örnek inceledikten sonra uygulama yapma vaktinin geldiğini düşünerek ilk uygulama için kolları sıvadım.

Öncelikle web.config içinde gerekli değişiklikleri yapmam gerekiyordu. Bunun için araç çubuğundan Website->ASP.NET Configuration yolunu izledim. Hepimizin alışkın olduğu Webadmin arayüzüne , buradan da Security sekmesine geçip ayarları yapacaktım ki… Beni  dünyalar güzeli bu hata mesajı karşıladı:

There is a problem with your selected data store. This can be caused
by an invalid server name or credentials, or by insufficient
permission. It can also be caused by the role manager feature not being
enabled. Click the button below to be redirected to a page where you
can choose a new data store
.

Yazının bundan sonrasını dikkatli okumanızı öneriyorum. Bu sorunu çözmek için uğraşırken öğrendiğim şeyleri de paylaşıyor olacağım.

Belli ki Webadmin gerekli veritabanına ulaşamıyordu. Eğer ulaşsaydı burada tanımlayacağım ilgili kuralları veritabanına aktaracaktı yada veritabanında hali hazırda bulunanları bana gösterecekti. ASP.NET ile gelen çoğu API ‘nın (Roles , profile vb.) default olarak SQL SERVER 2005 EXPRESS EDITION ile çalıştığını biliyorum. Fakat ben kuruluma bunu dahil etmeyip ayrıca kullandığım SQL SERVER 2005 DEVELOPER EDITION ile uygulamalarımı geliştiriyorum. Demekki bir yerlerde bu bağlantıyla ilgili ayarlar olmalı . (Hard coded olacak değil ya)

C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxx dizinine gittim. Zaten bir haftadır sürekli bu dizine gidiyorum :) ve ASP.NET ile uygulama geliştirecek arkadaşlara burayı dikkatlice incelemelerini öneriyorum. Mesela Webadmin dediğimiz arayüze ait dosyalar burada. Yada Asp.net ‘in ilgili yerlere kaydının yapılması için gerekli reg_xxx araçları da burada. Yukarıdaki hata mesajından sonra asp.net_regsql aracını kullanmamı söyleyen bir ekranla da karşılaşmıştım.

Hemen bu aracı çalıştırdım. (Neye yaradığını biliyorum ama size anlatmak için gene de yazıyorum :) ) Bu araç ASP.NET 2.0 ile gelen ve bahsi geçen API ‘ları kullanabilmek için belirteceğiniz veri kaynağında kendisi için gerekli veritabanı, tablo , trigger , stored proc. gibi bileşenleri oluşturuyor. Bunları oluştururken kullandığı SQL komutlarını yine bulunduğunuz dizin içerisinde görebilirsiniz. Hem oluşturmak hem de silmek için gerekli tüm komutlar C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxx dizininde mevcut. (Çalıştığınız yerdeki DBA pürüz yaparsa bu dosyaları ona  gösterirmeniz gerekebilir).

Yeri gelmişken bir konuya daha değinmek istiyorum. Aslında Login kontrollerinin pek de tercih edilmemesinin altında yatan neden bu yani  veritabanı sunucunuzda kendince birşeyler oluşturmak ve kullanmak istemesi. Çoğu profesyonel uygulama geliştirici kontrolü elden bırakmamak adına bu hazır API ‘lardan kaçınıyor. Ama bir gerçek varki o da bu yardımcı uygulamalar sayesinde işlerin hızlıca halledilebildiği.

Asp.net_regsql aracını çalıştırdıktan sonra veritabanı sunucunuza bağlanabilmek için gerekli bilgileri vermeniz ve next diyerek olayı halletmeniz mümkün. Bu noktada bilmeniz gereken çok da birşey yok. Ama işlemleri doğrudan SQL dosyalarını kullanarak yapmak istiyorum diyorsanız (Benim gibi anti-wizard biriyseniz yani) bu noktada sıralamaya dikkat etmelisiniz. Bunun için de dosyalarda yerlana yorum satırlarını dikkatlice okumalısınız. İşlemlerin sonucunda aspnetdb ve ASPSTATE adlı 2 yeni veritabanımız oluyor. Gerekli veritabanları da hazır . Şimdi bağlantı olayını da hallettik mi herşey tamamdır.

Yukarıdaki hata mesajında bahsi geçen  butona tıklayınca MemberShip Provider gibi şeylerin geçtiği bir yazı karşıladı beni. Sonra da daha önce ISS MANAGER ‘da görüp de “nedir bunlar” diye düşündüğüm MemberShip Provider alanları geldi aklıma ve ISS MANAGER ‘ı çalıştırdım. Zaten çözüme gitmemdeki en büyük adım da bu oldu. ISS MANAGER içinde gezinirken gözüme çarpan diğer birşey de data source=.\SQLEXPRESS;IntegratedSecurity=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true ifadesi oldu. Bu yazıyı görünce anladım ki uygulamamda App_Data dizininde aspnetdb.mdf dosyası aranıyordu ve buna bağlanılmaya çalışılıyordu. Bu ayarı kendi veritabanı sunucum için gerekli Connection String ile değiştirerek sorunu çözmüş oldum. Her ne kadar ben bunu ISS MANAGER kullanarak yapmış da olsam , sizler doğrudan web.config içine aşağıdaki bloğu ekleyerek sorununuzu çözebilirsiniz:

<connectionStrings>
   <
remove name=LocalSqlServer/>
   <
add name=LocalSqlServer connectionString=” GEREKLİ CONNECTION STRING BURAYA”  providerName=System.Data.SqlClient/>
</
connectionStrings>


Yukarıda yaklaşık 2 saat önce yaşadıklarım yer alıyor. Burada önemli olan sorunu çözmeye çalışırken ne öğrendiğim. Öncelikle ASP.NET configuration (Webadmin) denilen araç sadece web.config dosyası ile çalışabilmek için gerekli arayüzü sunuyor. Kendiniz de aynı işlemleri doğrudan web.config dosyasını düzenleyerek yapabilirsiniz. Bu araç çalışma sırasında gerekli bilgileri uygulamanızın web.config dosyasından ve bilgisayarınızdaki machine config dosyasından okuyor.
IIS Manager dediğimiz araç da yine web uygulamanız için gerekli ayarları yaparak,  bu ayarları ya uygulamanın web.config dosyaysına yada sistemimizin genel machine.config dosyasına yazar. IIS Manager ‘da Properties ->ASP.NET yolunu izlerseniz karşınıza çıkan EDIT GLOBAL CONFIGURATION (Sadece default web site için aktiftir) ile ISS üzerinden yayınlanan tüm sitelerde geçerli olacak ayarları yapıp machine.config ‘e kaydederken Edit Configuration ile de seçmiş olduğunuz site için gerekli ayarları yapıp o sitenin web.config dosyasına kaydedersiniz.

Şimdilik benden bu kadar. Umarım faydalı bir yazı olur ve bu hata mesajı ile arama yapıp bloguma gelenlerin sorununu çözer. Bugün saat 15:00 ‘da nedirtv tarafından düzenlenen ASP.NET AJAX seminerinde olacağım. Seminer notlarımı da fırsat bulunca blogumda paylaşacağım. Bir sonraki yazıya kadar sağlıcakla kalın…