Tags: , , , , , , , | Categories: Genel Posted by okutbay on 30.03.2010 10:55 | Yorumlar (5)

Bazen iki tarihin arasında geçen süreyi bulmanız gerekir. Bu kişinin şu anki yaşı olabileceği gibi bir işçinin o gün çalıştığı süre de olabilir. C# bize bu konuda yardımcı olmak için TimeSpan tipini sunar. Bu tipi kullanarak iki tarih arasında geçen süreyi farklı şekillerde alabiliriz. Örneğin iki tarih arasında kaç saat olduğunu bulmak istiyorsak TotalHours özelliğini kullanabiliriz. Eğer iki tarih arasında geçen sürenin sadece saat kısmı bizi ilgilendiriyorsa Hours özelliğini kullanabiliriz.

    1 DateTime myStartTime = Convert.ToDateTime("30.03.2010 08:04:00");

    2 DateTime myEndTime = Convert.ToDateTime("30.03.2010 18:02:00");

    3 TimeSpan myWorkingTime = myEndTime - myStartTime;

    4 double myWorkingHours = myWorkingTime.TotalHours;

Bu işi uygulamanız içinde birden çok kullanacaksanız bir method haline getirmek faydalı olacaktır.

    1 public static double GetWorkingHours(DateTime startTime, DateTime endTime)

    2 {

    3     TimeSpan workingTime = endTime - startTime;

    4     double workingHours = workingTime.TotalHours;

    5     return workingHours;

    6 }

 

bu yeni metodu soyle kullanirsiniz.

    1 DateTime myStartTime = Convert.ToDateTime("30.03.2010 08:04:00");

    2 DateTime myEndTime = Convert.ToDateTime("30.03.2010 18:02:00");

    3 double myWorkingHours = GetWorkingHours(myStartTime, myEndTime);

 

Not:Methodun ve kodun aynı classta olduğu varsayılmıştır...

Kolay gelsin...

1 kişi tarafından 1.0 olarak değerlendirildi

  • Currently 1/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , , , | Categories: Programlama, SSS (FAQ), Tip Posted by okutbay on 13.11.2009 17:32 | Yorumlar (0)

Clipboard is a windows object. If you want to use clipboard in your .NET framework console applications you must reference `System.Windows.Forms` and mark your main method with `STAThreadAttribute` attribute.

Then you can use this class's methods e.g. Clipboard.SetText("some text to store in the clipboard");

Happy coding.

1 kişi tarafından 2.0 olarak değerlendirildi

  • Currently 2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , | Categories: Genel Posted by okutbay on 08.10.2009 16:01 | Yorumlar (0)

According to business rule all footballer name and surname must be capitalized and not longer than 8 chars length.

Very simple to develop. We develop a wrapper method for this job. Seems working fine. Until this morning. Game masters of the http://icanfootball.com noticed that some player names violates this business rule. After my first debuging i found the problem. ToLowerInvariant method is the guilty. No, infact the developer who uses this method is guilty. Because this methods unable to convert "i" to "İ", "ı" to "I" or reverse. This chars specific to Turkish locale and this methods are invariant (means Culture Indepentend and works same as calling ToLower or ToUpper method with CultureInfo.InvariantCulture enum). 

So in my opinion this methods are useless. Please use ToLower or ToUpper method with appropriate culture info.

You can check this sample code.

 

    1 string a = "ı I ş Ş ç Ç ğ Ğ ö Ö ü Ü i İ";

    2 

    3 string b = a.ToLowerInvariant();//b = "ı i ş ş ç ç ğ ğ ö ö ü ü i İ" fails to convert

    4 string d = a.ToUpperInvariant();//c = "ı I Ş Ş Ç Ç Ğ Ğ Ö Ö Ü Ü I İ" fails to convert

    5 

    6 string culture = "tr-TR";

    7 System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo(culture);

    8 

    9 string c = a.ToLower(cultureInfo);//d = "ı ı ş ş ç ç ğ ğ ö ö ü ü i i"

   10 string e = a.ToUpper(cultureInfo);//e = "I I Ş Ş Ç Ç Ğ Ğ Ö Ö Ü Ü İ İ"

 

 

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , | Categories: SSS (FAQ), Web Uygulaması Posted by okutbay on 20.08.2009 11:37 | Yorumlar (0)

Sometimes you need to use Http handlers to respond to requests rather than classical asp.net pages. At that times if you want to use session objects you will see that HttpContext.Current.Session is null.

If you want to read session state from you http handler your http handler must implement System.Web.SessionState.IReadOnlySessionState interface. If you want to modify the session state you can implement System.Web.SessionState.IRequiresSessionState.

Sample:

    1 public class Login : IHttpHandler, SessionState.IRequiresSessionState

Happy coding.

3 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , , | Categories: Security, Web Uygulaması Posted by okutbay on 18.08.2009 13:51 | Yorumlar (0)

Web uygulamaları Internet üzerinden anonim (kimliği belirsiz) ziyaretçiler tarafından kullanılırlar. Kullanıcılar hakkında bilgi toplamak ya da sadece belirli kaynaklara erişimlerini sağlamak istiyorsak öncelikle onların kim olduğunu belirli bir kaynaktan sorgulayıp, doğru kişi olduklarını onaylamamız gerekir. Bu işleme "Kimliklendirme (Authentication)" denir.

Web uygulamalarında farklı kimliklendirme yöntemleri olsada Internet üzerinden erişilen uygulamalar için uygun olan kimliklendirme yöntemi "Forms" yöntemidir. (Bu noktadan sonra Forms Authentication olarak anılacaktır.)

Forms authentication kullanımını aktif hale getirmek için web uygulamanızın ayar dosyası Web.Config içinde <authentication mode="Forms" /> satırı yer almalıdır.

1 <configuration>
2 <system.web>
3 <authentication mode="Forms"/>
4 </system.web>
5 </configuration>

Aktif edilen Forms authentication için giriş sayfası, varsayılan sayfa, zaman aşımı, çerez adı gibi ayarlar yapılmalıdır. Bu noktada yapılabilecek ayalar bu kadar değildir. Detaylı bilgi için makalenin sonunda yer alan makaleye göz atmanızı öneririm.

1 <authentication mode="Forms">
2 <forms loginUrl="login.aspx"
3 defaultUrl="default.aspx"
4 timeout="30"
5 name=".ASPXAUTHWEBLEBICI"/>
6 </authentication>

Böylece FormsAuthenticationModule sınıfının gerektirdiği asgari ayarları yapmış oluruz. Artık kimliklendirme aşamasını takip eden "Yetkilendirme" (Authorization) aşaması için gerekli ayarları yapmaya geçebiliriz.

Yetkilendirme için web.config dosyamızda authorization elemanını kullanarak UrlAuthorizationModule sınıfını ayarlayabiliriz.

1 <system.web>

2 <authorization>

3 <deny users="?" />

4 </authorization>

5 </system.web>

Uygulamamızın ana ayar dosyasında yapılan bu ayarla birlikte uygulamamıza gelen anonim kullanıcıların kaynaklara erişimi reddedilerek kimliklendirme ayarında belirtilen giriş sayfasına kimliklendirme işlemi için gönderilmeleri sağlanacaktır. Burada soru işareti anonim (kimliksiz) kullanıcıları temsil ederken tüm kullanıcıları temsil etmek için "*" değeri kullanılabilir. Unutulmaması gereken noktalardan biri ise ayar dosyalarının yukarıdan aşağıya doğru işlendiğidir. Örneğin deny satırı üzerine yazacağınız <allow users="*" /> ayarı tüm kullanıcların siteye erişmesi anlamına gelecektir...

Önemli Not: Authentication ayarı sadece uygulamamızın ana klasöründe bulunan web.config dosyasında yapılabilirken authorization ayarı ana klasör veya alt klasörler için oluşturulacak web.config dosyalarında bulundukları klasörü kapsayacak şekilde yapılabilir. Yani uygulamanız anonim erişime açıkken sadece belli bir klasörü yetkili erişim için ayarlayabilirsiniz.

Belirlenen giriş sayfasına gelen kullanıcılar belirlenmiş olan veri kaynağından kimliklerini onayladıktan sonra ilgili kaynağa girmeye yetkiliyseler bu kaynağa erişebilirler. Aksi halde tekrar giriş sayfasına geri gönderilirler ve kaynağa erişmeye yetkili bir kullanıcı bilgisi ise giriş yapmaları beklenir. Bizim senaryomuzda kimlik doğrulamasını geçen tüm kullanıcılar kaynaklara erişmeye yetkilidir. Farklı kişi ya da gruplar için erişim deny ya da allow elemanları users ya da roles öznitelikleri ile kullanılabilir...

Bu noktada bazı kararlar vermeniz gerekecektir. Ama hangi kararları alırsanız alın temelde yapacağınız işlemler aynıdır. Kullanıcı bilgilerini web.config de depolayabilir ya da bir veritabanı tablosu, web servis gibi bir kaynakla kontrol edebilirsiniz. Her halukarda kullanıcı adı ve şifresini kullanıcıdan girmesini isteyeceğiniz bir sayfanız olacaktır. Kullanıcı bilgileri girip, giriş butonuna tıklayacak ve siz arka tarafta hangi mekanizmayı kullanıyor olursanız olun yapacağınız işlem bu kullanıcının varolup olmadığına bakmak, şifresinin uyup uymadığını kontrol etmek, doğru ise siteye girişine izin vermek yanlış ise tekrar giriş sayfasına yönlendirmek olacaktır.

Kısıtlanmış bir kaynağa erişilmek istendiği zaman yapılan ayarlar gereği kullanıcı dönüş adresi ile birlikte login sayfasına yönlendirilecektir.

Referanslar:

Explained: Forms Authentication in ASP.NET 2.0 (patterns & practices Developer Center)

How To: Use Forms Authentication with SQL Server in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ms998317.aspx

How To: Use Membership in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ms998347.aspx

How To: Use Role Manager in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ms998314.aspx

1 kişi tarafından 3.0 olarak değerlendirildi

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , | Categories: Programlama Posted by okutbay on 19.11.2008 11:34 | Yorumlar (0)

Programlama işine bir miktar aşina iseniz ya da etrafınızda deneyimli programcılar var ise değer tipleri (value types), referans tipleri (reference types) laflarını duymuş olmanız muhtemeldir. Kısaca hatırlayacak olursak bir değer tipi doğrudan değerin kendisini saklarken, referans tipi değerin saklandığı hafıza bölgesinin adresini saklıyorlardı.

Gel gelelim oyle durumlar oldu ki degiskenin degersiz olmasi gerekiyordu. Mesela bir kullanici sundugunuz seceneklerden herhangi birini secmeyebilir. Bu durumda eskiden gider ilgili secime karsilik gelen degiskene 0 ya da -1 atardik. Bu da secilmedigi anlamina gelirdi.

Ama .NET Nullable Types artik herhangi bir deger tipimiz de null degerini tasiyabilir. (Tabi aslinda bu tipler referans tipi ama unboxing yapmadan deger tipine atanabilirler)

Ornegin null alabilen integer tipine ornek vermemiz gerekirse kullanimi soyle ozetlenebilir:

    1 class Program
    2 {
    3     static void Main(string[] args)
    4     {
    5         int? a = null;
    6         int id = -1;
    7 
    8         //1nci yontem
    9         if (a.HasValue)
   10         {
   11             id = a.Value;
   12         }
   13         else
   14         {
   15             id = -10;
   16         }
   17 
   18         //2nci yontem
   19         id = a.GetValueOrDefault(-10);
   20 
   21         //3nci
   22         id = a.HasValue ? a.Value : (int)-10;
   23     }
   24 }

 

Not: ? isareti null deger alabilen tiplerin kisa gosterimidir. Eger bir yerde System.Nullable<int> gorursenin bu int? ile ayni seydir.

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , | Categories: Web Uygulaması Posted by okutbay on 23.05.2007 13:14 | Yorumlar (0)
App_Browsers: ASP.NET'in browserları tanımlamak ve yeteneklerini anlamak için kullandığı ".browser" uzantılı browser tanım dosyaları içindir.

App_Code: Uygulamanızın bir parçası olarak derlenmesini istediğiniz sınıflara ve iş nesnelerine ait kaynak kod dosyalarının (.cs, .vb ve jsl gibi) bulunacağı klasördür.

App_Data: MS Access (.mdb), SQL Server 2005 Express (.mdf) ya da XML dosyaları gibi uygulamanın kullanabileceği veri dosyalarını bulunduracağız klasördür.

App_GlobalResources: Uygulama kapsamında kullanılacak ve assembly dosyaları içine derlenecek kaynak dosyalarını (.resx, .resource) içerecektir.

App_LocalResources: Bu klasör de kaynak dosyalarını (.resx, .resource) yerleştirmek içindir. Ancak bu klasör içine yerleştirilecek dosyalar belirli bir sayfa, kullanıcı kontrolü ya da masterpage kapsamında kullanılacak dosyalar olmalıdır.

App_Themes: Web sayfalarının ve kontrollerinin görünümünü tanımlayacak dosyaları içerecektir. Bu dosyalar .skin, .css doslayarı olabileceği gibi imaj ve genel (jenerik) kaynak dosyaları da olabilir.

App_WebReferences: .wsdl, .xsd, .disco ve .discomap web referansları tanımlayan dosyaları içerecektir.

Bin: Uygulamanıza refere etmek istediğini kodlar için derlenmiş assembly (.dll) dosyalarını içerekcektir. Bu klasöre konan .dll dosyaları uygulanmanızda otomatik olarak refere edilirler.

Önemli Not: Önerilen bu klasör yapısını kullanmak bu klasörlerden herhangi birine (App_Themes klasörü hariç) gözatmak isteyen bir kullanıcının HTTP 403 Yasak hatasını alması ile sonuçlanır.


Kaynak: MCTS Exam 70-528 Microsoft .NET Framework 2.0 Web-Based Client Development Trainnig Kit

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5