Blog Home  Yalcomania'n�n Yeri Feed your aggregator (RSS 2.0)  
Yalçın Uzun - Wednesday, June 06, 2007
Kişisel Blog
 
 Wednesday, June 06, 2007

Nhibnernate'i webde kullanırken güvenlik ayarlarından dolayı oldukça zorluk çektim.
godaddy'de host edilen web projem sürekli izinlerden dolayı çatlıyordu.

Uzun araştırmalardan sonra web config'i aşağıdaki gibi düzenleyerek bu hatalardan kurtuldum.

Önemli olan nokta "nhibernate" adlı bir configsection açılması ve reflection kullanımının kapatılması. Aynı satır nhibernate-configuration section'unda olursa yine çalışmıyor.

      <configSections>

            <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" requirePermission="false"/>

            <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>

             </sectionGroup>

      </configSections>

      <nhibernate>

            <add key="hibernate.use_reflection_optimizer" value="false"/>

      </nhibernate>

      <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

            <session-factory>

                  <property name="hibernate.dialect">NHibernate.Dialect.MsSql2005Dialect</property>

                  <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>

                  <property name="connection.connection_string">server=.;database=XXXX;User ID=XXX;Password=XXX;</property>

                  <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>

            </session-factory>

      </hibernate-configuration>

 

Wednesday, June 06, 2007 8:01:58 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Tuesday, June 05, 2007

Projelerimde çok fazla kullandığım ve yazmayı tam anlamıyla amelelik gördüğüm bir şey için bir makro yazdım, sizinle de paylaşmak istedim.

Genellikle formlarımın load'unda:

gibi textbox, datetime picker gibi kontrolleri dolduran bir kod oluyor:

Şekil 1-A:

            this.textBox1.Text = h.Ad;

            this.textBox2.Text = h.Soyad;

            this.textBox3.Text = h.Email;



Bir de Kaydetme işini yapan butonun altında da şöyle kodlarım oluyor:

Şekil 1-B:

                  h.Ad=this.textBox1.Text;

                  h.Soyad=this.textBox2.Text;

                  h.Email=this.textBox3.Text;


İşte bu makro bu ikisini birbirine dönüştürüyor. Yani doldurmayı, atamaya ve atamayı doldurmaya çeviriyor. Tür dönüşümü vs gibi işlemler için hiç bir önlem almadım, ancak bu işlem bile benim işlerimi oldukça kolaylaştırdı.

Mantığı oldukça basit. Eşittir gördüğü satırı Split fonksiyonu ile parçalıyor. Sonundaki noktalı vürgülü kaldırıyor. Bir sonraki aşamada parçaladığı yerleri değiştirirek ve sonuna noktalı vürgül atıyor. Bunu ekrana yazıyor.

Dosya "vb" uzantılı. Bunu eklemek için bir notepadde açın, içeriği kopyalayın. Visual Studio'da Macro Explorer'da yeni bir modül yaratın. Adını "TersCevir" koyun. (Büyük harf küçük harf duyarlı) Çift tıklayıp, içeriği yapıştırın.

Çalıştırmak için ters çevirmek istediğiniz kodları işaretleyip, makro menüsünden TersCevir'i çift tıklamanız yeterlidir.

Afiyet olsun.


TersCevir.zip (760 Byte)
Tuesday, June 05, 2007 11:22:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 

Bir projemde şöyle bir senaryo ile karşılaştım.
Kullanıcı kendisi ile ilgili açılan bir bölüme, başkasının görmemesi gereken dosyaları upload etmesi gerekiyordu.
Aynı şekilde site yöneticisi de bu kişi adına oraya dosya atabilmeliydi. Ancak dediğim gibi bu dosyanın başkası tarafından görülmemesi çok önemliydi.

Response.redirect'le veya bir link vererek bu işi yapamazdım, çünkü browser'ın history'sinde kaldığı için aynı makinaya oturan bir başkası o linki tıkladığında dosyayı indirebilirdi.

İnternette bulduğum şu yöntem çok hoşuma gitti:


public class FileManager

{

    public static void DownloadFile(int FileId)

    {

 

        MyClass.Entity.File f = (MyClass.Entity.File)Facade.Dosya.GetById(FileId).File; //Burası önemsiz, dosya bilgileri
        //f.Name'de dosyanın GUID isimle kaydedilmiş hali var, OriginalName özelliğinde ise dosyanın orjinal adı var (a.jpg gibi)

        System.IO.FileStream fs= System.IO.File.Open(System.Web.HttpContext.Current.Server.MapPath(@"~/Files/"+f.Name),System.IO.FileMode.Open);

        byte[] bytes = new byte[fs.Length];

        fs.Read(bytes, 0, (int)fs.Length);

        fs.Close();

        System.Web.HttpContext.Current.Response.AddHeader("Content-disposition","attachment; filename="+f.OriginalName );

        System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";

        System.Web.HttpContext.Current.Response.BinaryWrite(bytes);

        System.Web.HttpContext.Current.Response.End();

    }

}

Tuesday, June 05, 2007 3:52:47 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Monday, June 04, 2007

Forumların favori sorularından:

CrystalReport1 r=new CrystalReport1();

((CrystalDecisions.CrystalReports.Engine.TextObject)r.Section1.ReportObjects["txtHede"]).Text = "Deneme";

Not: Bu kodu sadece Report header,footer ve page header ve footer için kullanabilirsiniz. Details bölümündeki (yani section 3) text objelerine bu şekilde erişemezsiniz.


 

Monday, June 04, 2007 6:23:42 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 

Dinamik olarak ajax yükleniyor resimleri (indicator) oluşturabileceğiniz harika bir site:

http://www.ajaxload.info

 

Monday, June 04, 2007 3:33:47 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]    | 
 Saturday, June 02, 2007

Saat 15:23'ü gösteriyordu. İki gündür uyumamıştı. İçtiği kahvelerin sayısını hatırlamıyordu.

Önünde bitmiş sigara paketleri dağ yığını oluşturmuştu. Projenin bitim süresinin gelmesine sadece 1 gün kalmıştı. Ancak bir sorun vardı. Mail gönderme işlemi yapacak kodları bir türlü çalışmıyordu. Sürekli ekranda aynı hata mesajını görüyordu. Doğrusu canı oldukça sıkılmıştı.

İşin içinden çıkamayacağını düşünüp, umutsuzluğa kapıldı. Sonra kendi kendine “neden bu soruyu forumda sormuyorum ki” dedi, belki birisi ona yardım edebilirdi.

Hızla browser'ını açtı ve adres çubuğuna "www.yazilimuzmani.com" yazdı. Sitenin forum bölümüne girdi.

Kendisinden önce o sorunla karşılaşmış var mıdır diye aramaya ne gerek vardı ki? Karşılaştığı sorun çok üst düzey bir problemdi . Kesinlikle başka birisi benzer bir şeyle karşılaşmış ve forumda yanıt bulmuş olamazdı. Hem niye aramakla vakit kaybedecekti ki? Aramak kendine güvenmeyenlerin işiydi.

ASP.Net kategorisine tıkladı ve “Yeni Mesaj” düğmesine bastı. Mesaj bölümüne sorununu yazdı:

 "Slms
c#'ta bi saatir uğraşıyorum mail atamıyorum yardımcı olacak arkadaşlara şimdiden tşk."

Sorunu gayet açık ve Türkçe anlatmıştı. Artık herkes sorusunu anlayıp, net bir cevap verebilirdi.

Ancak çok fazla vakti yoktu. Zaman hızla ileriyordu. Bu yüzden cevap verilmesini hızlandıracak bir şey yapması gerekiyordu. Çözümü çok geçmeden buldu. Neden mesaj başlığına büyük harflerle "ACİL!!!" yazmasındı ki? Böylelikle bütün forum üyeleri işlerini güçlerini bırakıp, belki de o sırada öpüşmekte olduğu kız arkadaşlarını terkedip, belki de toplantısını yarıda kesip ona yardım edeceklerdi. O an kapılacakları paniği düşündü. Onları zor durumda bıraktığı için bir taraftan üzülüyordu da. Kimbilir o insanların hayatında nelere sebep olacaktı.  Forumda o sırada gezinen biri mesajını görecek, "ACİL!!!" ibaresini görünce panikleyip belki de bir tarafını kıracaktı. Belki de sorunu acil olduğu için herkes cevaplamak için siteye akın edecek ve site kilitlenecekti. Ama olsun bilgi paylaştıkça çoğalırdı. Bedeli ne olursa olsun.

Cevaplanmamış diğer sorular da olabilirdi tabi o sırada. Ancak onlarınki keyf-i sorulardı. Durumları kendisininki kadar acele değildi. Eğer acil olsaydı, salak değillerdi ya, onlar da başlıklarına "ACİL!!!" ibaresini eklerlerdi.

Hemen başlık bölümüne "ACİL!!! Mail sorunu" yazdı. Tam “Gönder düğmesine basacaktı ki, içine bir kurt düştü. Ya mail konusunda bilgisi olan insanlar başlığı görüp, “nasıl olsa biri cevaplar” diye es geçerse? O zaman sorunun ne olduğunu başlıkta belirtmenin bir alemi yoktu. Merak uyandıracak bir şey yazmalıydı ki, herkes o soruya baksın. “ACİL!!! “ kısmı hariç başlığını sildi ve yerine "ACİL!!! yardım edin pls" yazdı. Evet, şimdi olmuştu.

Tanrım! Ne kadar da zekiydi. Türkiye kesinlikle kendisinin kıymetini bilmiyordu. Keşke “Amerika'da olsaydım” dedi kendi kendine, “Beni bu zekayla kesin Microsoft'a müdür yaparlardı.”

Mesajını ve başlığını son bir kez daha okudu. Her şey olması gerektiği gibiydi. Gönder düğmesine bastı, sayfanın yenilenmesini bekledi..

Paketten bir sigara alıp, onu, artık gazı bitmeye yakın çakmağıyla yaktı. Derince içine çekti ve sorusuna cevap vermek için panikleyen insanları düşündü...

Gülümsedi....

Yalçın Uzun
Mart 2007
İstanbul

Saturday, June 02, 2007 4:21:23 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 

Uzun bir süredir beni rahatsız eden, ama üşengeçlikten çözümü aramadığım bir sorunu ve çözümünü sizinle paylaşmak isterim.



Problem:
Visual Studio'da Start Page'in altında Open ve Create "Project" yazan yerde "Web Site" gelmemesi. Tamam, File menüsünden istediğimiz web sayfasını oluşturup, açabiliyoruz ama o seçeneklerin olması gerektiği yerde olmaması insana yine de bir rahatsızlık veriyor. (veya ben fazla kılım)

Nedeni:
SQL Server'la beraber, biliyorsunuz ki Visual Studio da kuruluyor. (Bussiness Intelligence Projects için). Eğer önce SQL Server, daha sonra VS 2005 kurmuşsanız, sonradan kurulan VS 2005 arayüzü, SQL Server'ın kurduğu VS'in ayarlarını değiştirmiyor. Bu yüzden "Web Site" seçeneği çıkmıyor.

Çözümü:
"Tools" menüsünden "Import and Export Settings" seçeneğine tıklıyoruz. Çıkan seçeneklerden "Reset All Settings"'i seçiyoruz. İsteğinize göre mevcut ayarlarınızı bir sonraki ekranda kaydedbilirsiniz.

Dikkat:
Bu işlemi bilgisayarınızı ilk kurduğunuzda yapmanız tavsiye edilir. Çünkü ayarları "reset"lemek mevcut ayarları kaldırılması demektir. (Tools pencerisinde duran kod kısayolları gibi) İşbu sebepten ötürü resetlerken önce ayarların yedeğini almakta yarar var.

Saturday, June 02, 2007 3:00:54 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]    | 

Hayırlı uğurlu olsun...



Saturday, June 02, 2007 2:54:11 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
Copyright © 2008 Yalçın Uzun