Kadınlar ile Erkekler arasındaki farka Transact SQL ile bi bakış...

by Yasin Sirkecili 23. Kasım 2008 16:36


Daha iyi anlatılamazdı Tongue out

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

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

Tags:

Genel

CETURK Yazılım Seminerleri

by Yasin Sirkecili 22. Kasım 2008 23:00

Bugüne kadar gerçekleştirdiği bir çok etkinlikle bilişim sektörünün gelişmesine katkıda bulunan CETURK etkinliklerine devem ediyor.

22 Kasım Cumartesi günü "CETURK Yazılım Seminerleri" etkinliği düzenleniyor. IBM'de gerçekleşecek seminerde ORM ve Hibernate, Web 2.0 ve IBM Yaklaşım ve Kurumsal Servis Odaklı Mimari (Enterprise SOA) seminerleri verilecek.

Etkinliğe katılım her zamanki gibi ücretsiz olacaktır. Seminere katılan 5 kişiye çekiliş ile kitap hediye edilecektir.

Ayrintılı Bilgi ve Kayıt

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

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

Tags:

Duyurular

Makalelerimden Bazıları...

by Yasin Sirkecili 22. Kasım 2008 21:21

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

Genel

Value and Reference Types

by Yasin Sirkecili 22. Kasım 2008 20:49

Değer Tipleri ve Referans Tipleri  C# Değer tipi ve referans tipi olmak üzere iki ayrı değişken yönetimi mevcuttur. 

  • Değer tipleri programın çalışma zamanında değerleri ile birlikte belleğin stack bölgesinde türü ve içeriği ile saklanan değişken türüdür. Esnekliği yüksektir.

  • Referans tipleri ise belleğin Heap bölgesinde saklanan ancak bellekteki yerinin stack bölgesinde 4 byte olarak tanımlandığı değişken türüdür. Bu 4byte = 32 bit lik referans boyutu işletim sistemine bağlıdır. Eğer 64 Bit bir işletim sistemi kullanıyorsanız stack bölgesinde heap bölgesindeki herhangi bir değişkeni referans eden pointer değerinin boyutu 8 byte yani 64 bit olacaktır.

  Değer tiplerinin aşağıdaki örnekte olduğu gibi birbirine eşitlenmesi kopyalama yöntemi ile gerçekleştiğinden birbirinden bağımsızdırlar.

int i1 = 5;
int i2 = i1;
Response.Write(i2.ToString()); // 5


dediğimizde stack bölgesindeki i1 değişkeninin içeriği yine stack bölgesinde oluşan ikinci değişkenimiz olan i2 nin içeriğine kopyalanır. Bu durumda i1 değişkeninin değerinin değişmesi i2 değişkenini etkilemez.

 Değer tipleri genellikle sınırları belli olan değişken türlerini içerir. Yani Stack bölgesinde saklanan bir değişkenin bellekte kapladığı alan her daim sabittir. Ancak referans tiplerinde bu durum 32 bitlik bir OS için stack bölgesine 4 byte olarak yansırken tanımlanan değişkenin boyut sınırları bilinmediğinden heap bölgesinde ilgili değişkene ait boyut tahmin edilemez.

 string y = “yasin”;
 
string s = “sirkecili”; 

Şeklinde yapılan bir tanımlamada string değişken türü System.String sınıfından gelen bir referans tipi olduğundan belleğin stack bölgesinde iki farklı değişken için 4byte ,4byte olmak üzere iki farklı alan tanımlanır. Heap bölgesinde ise y değişkeni 10byte s değişkeni ise 18 byte yer kaplar.

 Bunun ölçümünü ; 
string y = "yasin";
string s = "sirkecili";
char[] bar = y.ToCharArray();
char[] bar2 = s.ToCharArray();
Response.Write(Convert.ToString((bar.Length * 16 /8)) + " byte <br>");
Response.Write(Convert.ToString((bar2.Length * 16 / 8)) + " byte"); 

Şeklinde yapabiliriz. Char veri tipi 16 bit yani ve bir byte 8 bittir. Bu denklem yardımıyla istediğimiz string türününün kaç byte olduğunu hesaplayabiliriz.  

  Aşağıdaki tabloda c# dilindeki değişkenlere ait türleri ve hangi türlerin hangi tipe ait olduğuna dair bilgi bulabilirsiniz.

     

Tip

Tür

İsim

Boyut(bit)

Açıklama

Değer Sbyte Signed byte 8 İşaretli byte
Değer Byte Unsigned Byte 8 İşaretsiz byte
Değer Short 16bit Signed Integer 16 İşaretli tam sayı(16bit)
Değer ushort 16bit UnSigned Integer 16 İşaretsiz tam sayı(16bit)
Değer İnt 32 bit signed Integer 32 İşaretli tam sayı 32 bit
Değer uint 32 bit unsigned Integer 32 İşaretsiz tam sayı 32 bit
Değer Long 64 bit signed Integer 64 İşretli 64 bit tam sayı
Değer ulong 64 bit unsigned Integer 64 İşretsiz 64 bit tam sayı
Değer Float 32 bit ondalıklı 32 32 bit İşaretli ondalıklı l sayı (7 haneli)
Değer Double 64 bit ondalıklı 64 64 bitİşaretli ondalıklı sayı (15-16 haneli)
Değer Decimal 128 bit real 128 128 bit İşaretli ondalıklı sayı (virgülden sonra 28 hane duyarlı)
Değer Bool Boolean 8 True yada false
Değer Char Karakter 16 Unicode karakterler
Referans String Karakter kümesi Belirsiz Text içerikli veriler.
Referans Object Tür bağımsız ana nesne Belirsiz Tüm türlerin üretildiği Tür bağımsız değişkendir.
 

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

C#

C# & Fibonacci

by Yasin Sirkecili 22. Kasım 2008 20:48

Forumda sorulan bir soru için yazdığım cevap: Fibonacci dizisini c# ile nasıl kısayoldan bulunabileceği...

ArrayList arys = new ArrayList();
arys.Add(1);
for (int
i = 1; i <= arys.Count; i++)
{
if
(arys.Count < 2)
{
arys.Add(1);
}
else
{
arys.Add(Convert.ToInt32(arys[i - 1]) + Convert
.ToInt32(arys[i - 2]));
if
(arys.Count == 20)
{
listBox1.Items.AddRange(arys.ToArray());
break
;
}
}
}

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4184,6765,10949,

ben ilk 20 terimini buldum siz isterseniz çoğaltabilirsiniz.

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

C#

C# 3.0 Test Sürüşü - 1 (Variable - Implicity typed local variables)

by Yasin Sirkecili 22. Kasım 2008 20:48

C# 3.0 da artık tür belirtmeksizin değişken tanımlamamıza olanak sağlayan yenilikler mevcut. Ancak bu değişkenlerin özelliği object değişkenler gibi referans tipli değişkenler değildir. Bunun yerine değeri atanırken tipinin belirkendiği değişkenlerdir. Bu özelliği JavaScriptten hatırlayacaksınız.

örneğin:

var deger = "yasin"; // string tipinde deger adında bir değişken yaratmış oldunuz.
var deger2 = 4 // integer tipinde deger2 adında bir değişken tanımlamış oldunuz.

gördüğünüz gibi var adıyla değişkenin valuesune bakarak değişkene değer aktarılabiliryor. Aslında bu tarz basit bir eylemi bi kaç ay önce bir projede db ile yaptığımız etkileşimler esnasında ihtiyaç duyup yazmıştım. Meğer kolayı varmış :)  (Radyonun resimlisi benim aklıma gelmişti sendromu) :) herneyse konumuza dönecek olursak var değişken tanımlamasında yukarıda da gödüğünüz üzere değişkenin değerinin türüne bakaraktan değişkenin tipini belirliyor yani eğer değişkene değer atamazsanız

örneğin;

var yasin; // değeri olmadığını için türünü belirleyemeyecek ve hata verecektir.

bununla beraber eğer değişkene null değerini atarsanız yine aynı hatayı verecektir.

var yasin2 = null // HATA !!


Bir noktaya daha değinmek gerekirse

var nesne 123 // nesne değişkenim şuanda integer tipinde;
nesne = "yasin sirkecili"; // HATA !! nesne değişkenimiz oluşturulurken integer tipinde olduğundan tekrar değer atayıp tipini değiştiremezsiniz.

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

C#

ScriptManager ve AsyncPostBackError

by Yasin Sirkecili 22. Kasım 2008 20:47

ASP.NET sayfalarında çalışma zamanında bazen kodlama hataları bazende sunucu işlemlerinden dolayı sıklıkla hata ile karşılaşırız. Bu gibi durumlarda kullanıcıya hata mesajını göstermek yada kullanıcının anlaması mümkün olmayan bir asp.net sayfasına yönlendirmek genel bir problemdir. Bu sorunu aşmak için AJAX yapısındaki ScriptManager kontrolünü kullanabiliriz.

UpdatePanel ve ScriptManagerın AsyncPostBackError eventinden faydalanarak sayfada oluşan hatalarda kullanıcıya hata mesajı göstermemiz mümkün.

Örneğin;

<asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" EnablePageMethods="True" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="Tıkla" />
</ContentTemplate>
</asp:UpdatePanel>
<br />
</div>

burada dikkat ederseniz ScriptManagerın OnAsyncPostBackError client side eventinı ScriptManager1_AsyncPostBackError eventına yönlendiriyoruz. Bundan sonra tek yapmamız gereken bir  hata yaratıp ScriptManager1_AsyncPostBackError eventını kullanarak hatayı kullanıcıdan gizleyerek Kullanıcıya basit bir hata mesajı göstermek.

Öncelikle Button1_Click eventı ile bir hata oluşturuyoruz.

protected void Button1_Click1(object sender, EventArgs e)
{
string[] dizi = new string[2];
dizi[0] = "birinci eleman";
dizi[1] = "ikinci eleman";
dizi[2] = "üçüncü eleman";
}

gördüğünüz gibi 2 elemanlı bir dizide eleman sayısı sınırının üstüne çıktık. Bu durumda IndexOutOfRangeException çalışarak hata verecektir. Biz bu hatayı ScriptManager1 in yakalamasını sağlayarak kendimize göre yönlendirmek için.

protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
ScriptManager1.AsyncPostBackErrorMessage = "bir hata olustu";
}

kod bloğunu kullanabiliriz. Böylelikle kullanıcı sayfada herhangi bir hata oluştuğunda standart hata mesajımızla karşılaşacaktır. Veya kullanıcıyı Response.Redirect("hata.aspx"); ile genel bir hata sayfasına yönlendirebiliriz.

Aynı yapıyı Masterpage içerisinde kullanarak daha genel bir hale getirebileceğimiz gibi. ScriptManager1 kontrolünün AsyncPostBackErrorMessage propertysine herhangi bir mesaj yazdığınızda AsyncPostBackError eventini yazmanıza gerek kalmayacaktır.

ScriptManager1_AsyncPostBackError mesajı içerisinde hata mesajının detaylarını e.Exception.Message diyerek string türünde elde edebilirsiniz.

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

AJAX

Validatörlerin püfleri - 1

by Yasin Sirkecili 22. Kasım 2008 20:36
  • RequiredFieldValidator

RequiredFieldValidator kontrolünün InitialValue propertysini kullanarak dropdownlist seçimlerimizde açıklama yazsını yazdığımız itemların seçilmesi durumunda validatörün tetiklenmesini sağlayabiliriz.

<asp:DropDownList ID="DropDownList1" runat="server">
   <asp:ListItem>Lütfen bir kişi seçiniz</asp:ListItem>
   <asp:ListItem>Yasin Sirkecili</asp:ListItem>
   <asp:ListItem>Levent Yıldız</asp:ListItem>
   <asp:ListItem>Mete Tunca</asp:ListItem>
   <asp:ListItem>Sem Göksu</asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="Button1" runat="server" Text="Button" />
     <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1" ErrorMessage="isim seçmediniz"  InitialValue="Lütfen bir kişi seçiniz"></asp:RequiredFieldValidator>

Yukarıdada gördüğünüz üzere ListItemlarımızdan 0 indexine sahip olan ve sadece açıklama nedeniyle kullandığımız itemın seçilmesi durumunda validatörün tetiklemesini sağlamak için Initial Value proprtysine itemla aynı text değeri atıyoruz. Initial Value propertysinin özelliği kendisine atanan katar ile validatörün kontrol ettiği kontrolün text değerinin aynı olmamasını sağlamaktır. Eğer iki değer aynı ise validatörün tetiklenerek uyarı mesajı vermesini sağlayacaktır.

  • CompareValidator

Çoğumuzun genellikle iki farklı kontroldeki değerlerin birbirleri ile aynı olup olmadığını denetlemek için kullandığımız CompareValidator aslında tek bir kontroldeki katarın sabitlenen bir değere eşit yada büyük yada küçük gibi kontrollerini yapmanın yanı sıra aynı zamanda girilen değerin data tipinide kontrol edebilir. Örneğin;

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
   <asp:Button ID="Button1" runat="server" Text="Button" />
   <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="textboxa yasin yazmadınız."             ValueToCompare="yasin"></asp:CompareValidator>

şeklinde bir kontrole girilen veriyi başka bir kontrolle karşılaştırmak yerine bir değerle karşılaştırabiliyoruz. Aynı olayı CompareValidatorımızın Operator ve Type properytlerinden faydalanarak matematiksel karşılaştırmalar yapmak gibi işlemler içinde kullanabiliriz. Örneğin;

<asp:CompareValidator ID="CompareValidator1" runat="server"  ControlToValidate="TextBox1" ErrorMessage="10dan büyük bir sayı yazmadınız." Operator="GreaterThan" Type="Integer" ValueToCompare="10"></asp:CompareValidator>

Burda kullanıcıyı integer tipinde bir değer girmeye zorlamanın yanı sıra aynı zamanda 10dan büyük bir değer girmeyede mecbur bırakıyoruz.

Sadece girilen verinin tipini kontrol etmek istersek;

<asp:CompareValidator ID="CompareValidator1" runat="server"  ControlToValidate="TextBox1" ErrorMessage="lütfen tam sayı bir değer giriniz." Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator>

şeklinde Operator propertysinin DataTypeCheck değerini kullanarak girilen verinin istediğimiz veri türüne olan uygunluğunuda kontrol edebiliriz. Test uygulaması yaptığınızda göreceğiniz üzere CompareValidatorün gelişmiş özellikleri birçok konuda RegularExpression ihtiyacını ortadan kaldırıyor.

Operator property'si 7 farklı değer alabilir. Bu değerler DataTypeCheck , Equal , NotEqual , GreaterThan , GreaterThanEqual , LessThan , LessThanEqual şeklinde olup bu değerlerden faydalanarak kontrol değerini karşılaştırma şeklinizi kolaylıkla belirleyebilirsiniz.

Type property'si ise 5 farklı değer alır ve bu değerler şöyledir: Currency , Date, Double, Integer, String

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

ASP.NET

FileUpload dosya boyutu sınırı ve işlem süresi

by Yasin Sirkecili 22. Kasım 2008 20:35

FileUpload kontrolü ile kullanıcı dosyalarını sunucunuza aktarırken pekde dikkat edilmeyen ancak DOS ataklarına karşın muhakkak önlem almamız gereken bi özellikten bahsetmek istiyorum. Default olarak bir asp.net uygulamasında maximum 4 MB yani 4096kb bir talebi işleme sokabiliriz. FileUpload'a eklenen kullanıcı dosyalarının bu sınırı aşması durumunda sayfa hata verecek ve dosya transfer edilmeyecektir. Ancak bu durum sunucuda 4mb lık talepler yaratacağından ard arda yapılması bir nevi Denial of service atack haline gelecektir. Hem bu durumu engellemek. Hemde ihtiyaç duyduğunuzda daha yüksek dosya boyutuna izin vermek için aşağıdaki düğümü ve niteliklerini web.config sayfanıza eklemeniz gerekiyor.

<httpRuntime maxRequestLength="11264" executionTimeout="120"/>

burda;

maxRequestLength : kb cinsinden dosya boyutu değeri örneğin ben 11 MB olarak belirledim.
executationTimeout : Request talebinin ne kadar süre içerisinde işlem görebileceğini sn cinsinden belirtir. Süre aşıldığında talebin iptali sağlanır. Bu durumda sunucunuzun taleplere cevap verme yetisi azaldıkça işlem süresi içinde gerçekleşmeyen talepleri iptal edeceğinden aynı zamanda aplikasyonunuzun korunmasına yardımcı olacaktır.

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

ASP.NET

Dinamik eklenen kontroller ve Updatepanel trigger ilişkisi

by Yasin Sirkecili 22. Kasım 2008 20:30

for (int j = 1; j <= Convert.ToInt32(toplamsayfa.Value); j++)
{
LinkButton lnkbutton = new LinkButton();
lnkbutton.Text =" " + j.ToString() + " ";
lnkbutton.Font.Overline = false;
lnkbutton.CommandArgument = j.ToString();
lnkbutton.Command += new CommandEventHandler(lnkbutton_Command);
lnkbutton.ID = "lnk" + j.ToString();
AsyncPostBackTrigger trig = new AsyncPostBackTrigger
();
trig.ControlID = lnkbutton.ClientID.ToString();
UpdatePanel2.Triggers.Add(trig);
Panel1.Controls.Add(lnkbutton);
}

yukarıda gördüğünüz son projemden, basit bir sayfalama algoritmasına ilişkin kısa bir blok. Burda dikkatinizi çekmek istediğim.

AsyncPostBackTrigger trig = new AsyncPostBackTrigger
();
trig.ControlID = lnkbutton.ClientID.ToString();
UpdatePanel2.Triggers.Add(trig);

şeklinde updatepanelinize dinamik olarak trigger ekleyebilirsiniz.

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

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

Tags:

AJAX | ASP.NET

Server-side table - tr - td

by Yasin Sirkecili 22. Kasım 2008 20:28
Az önce mail ile gelen sorulardan birine yazdığım cevabı burdada yayınlamak istedim. Bildiğiniz üzere asp.nette server-side table kullanarak dinamik olarak tablolar oluşturup verilerinizi bu tabloların hücrelerine aktarabilir ve görüntüleyebilirsiniz. Genel olarak baktığımızda veritabanı işlemleri hususunda verilerimizi datalist, detailsview, datagrid gibi kontrollere template tanımlayıp istediğimiz düzende görüntülenmesini sağlıyoruz. Ancak hem vt işlemlerinde bu kontroller olmadan kendi tablolama yapımızı oluşturarak verilerimizi görüntüleyebiliriz hemde veritabanı işlemleri haricinde de sunucu taraflı kodlarımızla arayüz görselliğine yön verebiliriz.

Örneğin;

  • Table table = new Table(); // System.Web.UI.WebControls.Table sınıfından yeni bir table nesnesi türetiyoruz
    TableRow tr = new TableRow(); // System.Web.UI.WebControls.TableRow sınıfından yeni bir tablerow nesnesi tıretiyoruz
    TableCell td1 = new TableCell();// System.Web.UI.WebControls.TableCell sınıfından yeni bir tablecell nesnesi türetiyoruz
    TableCell td2 = new TableCell();
    td1.Text =
    "yasin"; // türettiğimiz tablecell nesnesinin içerisine yasin yazıyoruz.
    td2.Text = "sirkecili";
    tr.Cells.Add(td1);
    // tablecell nesnemizi satır görevi görecek olan tablerow satırına ekliyoruz
    tr.Cells.Add(td2);
    table.Caption =
    "bu bir basliktir"; // asp.net 2.0 ile hayatımıza giren caption property si ile tablomuza başlık ekliyoruz.
    table.CaptionAlign = TableCaptionAlign.Left; // tablo başlığımızın görüntülenme şeklini System.Web.UI.WebControls.TableCaptionAlign enumaratör ile seçiyoruz. eğer hiç müdahale etmez isek standart olarak centered gelecektir.
    table.BackColor = System.Drawing.Color.Red; // table'ımıza arkaplan rengi seçiyoruz.
    table.BorderStyle = BorderStyle.Solid; // tableımızın border stilini belirliyoruz.
    table.Attributes.Add("Border", "2"); // border kalınlığını belirlemek amacıyla server-side table'ımızın html çıktısındaki attributelara müdahale ediyor ve border kalınlığını 2px olarak belirliyoruz.
    table.Rows.Add(tr); // içine daha önce hücrelerimizi eklediğimiz satırımızı tablomuza ekleyip ilişkilendiriyoruz.
    this.Controls.Add(table);// dinamik olarak hücrelerini ve satırlarını oluşturup stillerini belirlediğimiz tablomuzu görüntülenmesi amacıyla sayfamıza ekliyoruz.

    (ne açıklama yazdım ama beah Tongue out)

şeklinde aşağıdaki gibi çıktı yaratacak bi table oluşturabiliriz.

  • <table Border="2" border="0" style="background-color:Red;border-style:Solid;">
     <caption align="Left">
      bu bir basliktir
     </caption><tr>
      <td>yasin</td><td>sirkecili</td>
     </tr>
    </table>


tablomuzun görüntüsü bu şekilde olacaktır.

hepsi bu kadar...

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

ASP.NET

Literal & Mode Enumeration

by Yasin Sirkecili 22. Kasım 2008 20:28

Pek fazla kullanmasakda Literal kontrolü gözünüze çarpmıştır. Nedir ? ne işe yarar? hiç baktınız mı ?

Literal kontrolü label kontrolü gibi text propertysine atanan değeri html çıktısına yazdırır. Label'dan 1. farkı label text propertysindeki değeri html çıktısında span tagları arasında yazdırırken literal text propertysine atanan değeri doğrudan doğruya yazdırmayı sağlar. Peki bu durum nerde ve nasıl işe yarar?

mesela html çıktısına html tagları yazarken kullanabiliriz.

Literal kontrolüne ait mode property sine System.Web.UI.WebControls.LiteralMode enumaratörüne ait enum değişkenlerinden yaptığınız seçime göre kontrolün davranış nitelikleri değişecektir.

örneğin;

  • Label1.Text = "<YSN>yasin sirkecili</YSN>";
    Literal1.Mode = LiteralMode
    .PassThrough;
    Literal1.Text = "<YSN>yasin sirkecili</YSN>"
    ;
    Literal2.Mode = LiteralMode
    .Encode;
    Literal2.Text = "<YSN>yasin sirkecili</YSN>"
    ;
    Literal3.Mode = LiteralMode
    .Transform;
    Literal3.Text = "<YSN>yasin sirkecili</YSN>";

PassThrough: Text propertysine atanan değerin modifiye olmadan görüntülenmesini sağlar.
Encode: Text propertysine atanan değeri html-encoded haline getirerek tag işaretlerinin encoded karakterlere dönüşmesini sağlar.
Transform: Text propertysine atanan değer içerisinde browser tarafından yorumlanamayan tagların süzülerek gösterilmesini sağlar. Ancak günümüzde kullandığımız tüm tarayıcıların xhtml desteklediğini düşünürsek, Çıktının PassThrough modundan bir farkı olmayacaktır. Çünkü xhtml varolmayan tagların görüntülenmesine sebep olacaktır.

yukarıdaki kod blogunu çalıştırdığımızda alacağımız örnek çıktı aşağıdaki gibi olacaktır.

  •         Label:
            <span id="Label1"><YSN>yasin sirkecili</YSN></span>
            <br />
           
            Literal (PassThrough Mode):
            <YSN>yasin sirkecili</YSN>

            <br />

            Literal (Encode Mode):
            &lt;YSN&gt;yasin sirkecili&lt;/YSN&gt;

            <br />
           
            Literal (Transform mode):
            <YSN>yasin sirkecili</YSN>



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

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

Tags:

ASP.NET

SMTP Authentication ve System.Net.Mail Class

by Yasin Sirkecili 22. Kasım 2008 20:26

SMTP Authentication gerektirmeyen mail serverlarda çoğumuz smtp authentication bilgisi yazmadan maillerimizi gönderiyoruz Tabiki bu yöntemin kullanıldığı sunucular genel olarak spam mail göndermeye uygun diyebiliriz. Standart olarak birçoğumuz smtp serverımızı mail.alanadi.com şeklinde tanımladığımızdan eğer SMTP Authentication gerektirmeden mail gönderilmesine olanak sağlarsak herkesin bizim serverımız üzerinden mail göndermesi mümkün hale gelir. Bu bir güvenlik açığımıdır sorusuna evet diyebilirim çünkü milyonlarca mail gönderen toplu mail gönderme programları mevcut. Peki SMTP Authentication gerektiren sunucularda nasıl mail göndeririz ona değinelim.

ilk olarak işimizi kısayoldan halletmek için web.config dosyamıza system.net nodeunun altındaki mailSettings nodeunda gerekli ayarlarımızı yapalım.

<system.net>
<
mailSettings
>
<
smtp from="info@alanadi.com"
>
<
network port="25" host="mail.alanadi.com" userName="info@alanadi.com" password="sifrem" defaultCredentials="true"
/>
</
smtp
>
</
mailSettings
>
</
system.net>

bu aşamadan sonra kodlarımıza bakalım.

SmtpClient smtpserver = new SmtpClient();
MailAddress mSender = new MailAddress("info@alanadi.com"
);
MailAddress mTo = new MailAddress("to@alanadi.com"
);
MailMessage newMail = new MailMessage
(mSender, mTo);
smtpserver.Send(newMail);

gördüğünüz gibi bu aşamadan sonra info@alanadi.com adresi ile gönderdiğimiz tüm maillerde mailSettings nodeunda belirttiğimiz SMTP Authentication bilgileri geçerli olacaktır.

Peki ya Web.Config kullanmadan nasıl çözerim bu işi derseniz.

SmtpClient smtpserver = new SmtpClient();
MailAddress mSender = new MailAddress("info@alanadi.com");
MailAddress mTo = new MailAddress("to@alanadi.com");
MailMessage newMail = new MailMessage(mSender, mTo);
System.Net.
NetworkCredential auth = new System.Net.NetworkCredential("info@alanadi.com", "sifrem");
smtpserver.UseDefaultCredentials =
false;
smtpserver.Credentials = auth;
smtpserver.Send(newMail);

yönetiminide kullanabilirsiniz.

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

ASP.NET

Substitution ile yüksek performans ve Asenkron Caching

by Yasin Sirkecili 22. Kasım 2008 20:26

Asp.net uygulamalarında projelerimizi hızlandırmak için birçoğumuz caching yapısını kullanmışızdır. Ancak sayfaya belli bir süre için caching uyguladığımızda sayfanın tamamı cache bellekte saklanarak belirtilen zaman geçmediği müddetçe yenilenen verileri görmemiz mümkün olmuyordu. Bu sorunu önbelleğe alınan sayfanın dinamik noktalarını caching yapısından ayrı tutmamızı sağlayan substitution kontrolü kendisine gönderdiğimiz html çıktıları ile caching alanından bağımsız olarak dinamik yapısını kullanabilmektedir.

Konuyu bir örnek üzerinde açıklayacak olursak;

substitution.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="substitution.aspx.cs" Inherits="substitution" %>
<%@ OutputCache Duration="15" VaryByParam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label" ></asp:Label>
<br />
<asp:Substitution ID="Substitution1" runat="server" MethodName="SubFonk" />
</div>
</form>
</body>
</html>

 sayfamızda 15sn boyunca caching uygulaması yapacağımızı belirterek. 15sn boyunca sayfanın içeriğinin güncellenmemesini sağlayabiliriz. Ancak burda Substitution kontrolünün methodname propertysinden faydalanarak sayfa üzerinde dinamik bir alan tanımlayıp bu alanı güncelleyecek bir fonksiyon tanımlayabiliyoruz.

substitution.aspx.cs

public partial class substitution : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}
public static string SubFonk(HttpContext icerik)
{
return "Anlık Zaman: " + DateTime.Now.ToString();
}
}

Burada Page_Load eventine yerleştirdiğimiz kod ile sayfaya zamanı yazdırıyoruz. Ancak bu zaman ne kadar postback yaparsak yapalım cache duration süresi boyunca güncellenmeyecektir. Bu nedenle sayfa üzerinde 15sn geçmesini beklemeden güncellenecek bir alana ihtiyacımız olabilir. Bu durumda sayfa üzerine eklediğimiz ve SubFonk fonksiyonundan etkilenmesini istediğimiz Substitution1 kontrolümüz ile yine zamanı string formatında return ediyoruz. Böylelikle sayfanın 15sn lik zaman dilimindeki postbacklerinde Label1 in text propertysinin etkilenmeyeceğini ancak Substitution1 kontrolünün içeriğine string formatında gönderdiğimiz html içeriğinin güncellendiğini gözlemleyebiliriz.

Burada dikkat etmemiz gereken 2 husus vardır. 1. si Substitution kontrolü html çıktısını alacağından bu kontrolün methodname propertysine atadığımız fonksiyonun geriye string türünde veri göndermesi gerekmektedir. Bununla beraber 2. hususta yine bu fonksiyonun static olarak tanımlanması gerektiğidir. Bunun nedeni sayfa her postback olduğunda sunucu tarafında yeniden üretilmesidir. Static tanımlı methodlar bellekte static bölgesinde tutulduğundan yeniden üretilmeden çalışacaktır. Böylelikle caching mekanizmasına aykırı davranmamış olacaktır.

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

ASP.NET

Yüklenme safhasındaki Erişilebilir ve kontrol edilebilir sayfa olayları

by Yasin Sirkecili 22. Kasım 2008 20:25

Sayfanın taryıcıya gönderilmesi anına kadar kontrol edilebilir sayfa olaylarına genel olarak bakacak olursak PreInit, Init, InitComplete, PreLoad, Load, PreRender, PreRenderComplete, Unload olaylarını görürüz... Bu olayları kısaca açıklayayim...

PreInit: Sayfanın kullanıma hazırlanmasındaki ilk olaydır.
Init: Sayfanın kullanıma hazırlandığı safhadır. Ön yükleme diye adlandırabiliriz. Kontroller yüklenmeye başlar. Dinamik olarak kontrol ekleyecekseniz en uygun safhadır ki Belleğe ikinci işlemi yaptırmadan daha yüksek perdormans kullanabilesiniz.
InitComplete: Kontroller yüklenmesi tamamlanmıştır. Artık Load eventinde kontrollere erişebilir ve işlem yapabilirsiniz.
PreLoad: Sayfa belleğe yüklenmeye başlamak için hazırlanır.
Load: Sayfa belleğe yüklenir.
LoadComplete: Sayfanın belleğe yüklenmesi tamamlanır.
PreRender: Konroller bellekten tarayıcı için oluşturulmaya başlar.
PreRenderComplete: Sayfanın tarayıcıya gitmesi için hazır olduğu andır. Aynı zamanda viewstate bilgileride bu anda yüklenmiştir.
Unload: Sayfa bellekten silinir. Tüm kontroller bellekten kaldırılır.

Şimdi bu olayların yönetilmesine bakalım.

Page directive'inde default olarak tanımlı gelen AutoEventWireUp="true" attribute'u sayfanızda code-behind olarak eventlara ait protected methodları manuel olarak yazıp kullanmanıza olanak tanır. Sayfa yüklenirken burda belirttiğim 9 olaya ait methodları arar ve varolanların içindeki kodları gerçekleştirir. AutoEventWireUp attribute'u size event yaratmadan manuel olarak sadece olaylara ait methodları ve parametrelerini belirtip kullanmanızı sağlar.

Örneğin AutoEventWireUp="true" olduğu durumda code-behind sayfanıza

protected void Page_LoadComplete(object sender, EventArgs e) {
 //
}

methodunu ekleyip kullanabilirsiniz ancak false olduğu durumda öncelikle partital class ait bir constructor tanımlayarak classın çağırıldığı anda istediğiniz event'ların yaratılmasını sağlamanız gerekir. Örnekleyecek olursak

public deneme() {
Page.LoadComplete += new EventHandler(Page_LoadComplete);
}

deneme class ı için bir constructor tanımlayarak önce eventi belirtelim daha sonra...

protected void Page_LoadComplete(object sender, EventArgs e) {
 //
}


böylelikle artık sayfanın yüklenme safhasındaki olaylara müdahale edebiliriz. Bunların haricinde birkaç Page Event daha mevcut tabikide örneğin transactionları yönetmek, databinding anını gözlemlemek gibi... onlarıda başka bir yazıya artık...

 

Bu yazıyı ilk değerlendiren siz olun

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

Tags:

ASP.NET

ASP.NET 2.0'da CodeSubDirectories kullanarak birden fazla dil ile entegre çalışabilmek

by Yasin Sirkecili 22. Kasım 2008 20:24

ASP.NET klasörülerinden biri olan ve dinamik derlemeye tabi olan App_Code klasörünü birçoğumuz projelerimizde yazdığımız classlar için kullanmışızdır. Ancak zaman zaman Ortak çalışma, Hazır algoritmalar gibi gereksinimlerden dolayı kullandığımız dilden başka bir dildeki classları kullanmak zorunda kalmamız gerekir. (Basicci Proje arkadaşlarına saygı duymak :) )  Bu noktada asp.net 2.0 projelerinde birden fazla dil ile çalışabilirsiniz. Ancak App_Code klasörüne eklediğiniz classlar tek bir assembly olarak derleneceğinden debuggerın ayrım yapması gerekmektedir. Bu nedenle asp.net projenize App_Code altına 2 farklı dil için iki ayrı klasör ekleyip isimlerini csharp ve vbasic olarak belirleyin. Daha sonra web.config de compilation tagı altındaki codeSubDirectories tagını kullanarak farklı dillerdeki kodlarınızın uzantısına göre derlenmesini sağlayabilirsiniz. Böylelikle birden fazla dil ile entegre çalışabilirsiniz.

<compilation debug="true">
    <