C# ve VB.Net sınıflarını aynı uygulamada kullanmak

Yağız Gönüler tarafından yayınlanmıştır 2. Ekim 2009 01:12



Önce yapmamız gereken şey Visual Studio'da yukarıdaki gibi bir App_Code klasörü oluşturmak. Sonra bu klasörün içinde Class1.vb ve Class2.cs adlı 2 class oluşturmak.

Class1.cs'ye şunları yazalım öylesine:

public class Class1
{
    public static string Selam()
    {
        return "Bu, selamın C# halidir";
    }
}

Class1.vb'ye ise şunları yazalım:

Imports Microsoft.VisualBasic

Public Class Class2

     Public Shared Function Selam() As String
         Return "Bu, selamın VB halidir"
     End Function

End Class

Şimdi compile ettiğimizde şu hatayı alırız:

Error 1 The files ‘/ProjeAdi/App_Code/Class2.vb’  and ‘/ProjeAdi/App_Code/Class1.cs’ use a different language, which is not allowed since they need to be compiled together.

Artık geriye yapmamız gereken son şeyler kalıyor:

App_Code'un içine 2 klasör oluşturup birine CSCode diğerine VBCode adını verin. Daha önce hazırladığımız classları ilgili dillerine göre içlerine atın.

Web.config dosyamızda ise aşağıdaki değişikliği yapın:

<compilation debug="true">
  <codeSubDirectories>
     <add directoryName="CSCode"/>
     <add directoryName="VBCode"/>
  </codeSubDirectories>
</compilation>

Herşey bundan ibaret. Uzun bir aradan sonra makale tadında oldu bu da. İşinize yarar umarım, kolay gelsin.

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

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

Etiketler: , ,

Articles | Software

Asp.Net uygulamasında "Proxy authentication required" hatası ve çözümü

Yağız Gönüler tarafından yayınlanmıştır 22. Mayıs 2009 16:09

Bir arkadaşımın özel isteğiyle web sayfası için basit bir RssFeed uygulaması geliştireyim dedim. Karşılığında aldığım hata malumunuz. Öncelikle söyliyeyim bunun çözümü Visual Studio .Net'in ayarlarını değiştirmekle bir netice bulmuyor. O konuyu daha önce incelemiştik. Bunu söylememin sebebi, hataların isim benzerliğinden dolayı vakit kaybının olmaması. Bu sorun tamamen WebRequest & WebResponse işlemlerinden kaynaklı. Ama genel olarak işyerimdeki proxy ayarlarından dolayı böyle bir sorunla karşılaşıyorum. 2 türlü çözümü var.

1- Diyelim ki önce WebRequest tanımladık:

Dim myrequest As WebRequest = System.Net.WebRequest.Create(rssurl)

sonrasında tek yapmamız gereken şu:

myrequest.Proxy.Credentials = CredentialCache.DefaultCredentials

Böylece sorun çözülüyor. Ancak %10'luk bir çözülememe ihtimali var. Onun için birazcık daha uzun yolunu yazıyorum.

2- WebRequest'i yukarıdaki gibi tanımladıktan sonra:

Dim proxyObject As New System.Net.WebProxy("http://193.9.9.9:8080", True)

myrequest.Proxy = proxyObject

myrequest.Proxy.Credentials = New System.Net.NetworkCredential("domanin", "password")

Bu daha kesin bir çözüm oluyor.

Böylece birkaç gündür beni "deli eden" 2 soruna çözüm bulmuş oluyor ve "delirmek üzere" olan arkadaşlara da umarım yardımda bulunuyorum.

Umarım faydasını hepberaber görürüz. İyi çalışmalar dilerim.

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

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

Etiketler: , ,

Articles | Software | Web

Visual Studio.Net 2005'de "Proxy authentication required" hatası ve çözümü

Yağız Gönüler tarafından yayınlanmıştır 22. Mayıs 2009 15:30

Visual Studio .Net 2005'te bir Asp.Net projesi yaparken, projenin halini görmek için F5'e (yada CTRL + F5'e) basarız ve ne durumda olduğumuzu görürüz. Ancak bazen "The request failed with HTTP Status 407. Proxy authentication required" şeklinde bir hata mesajı alırız browserımızda. Bu hatanın iki sebebi vardır. İlkini şimdi yazıyorum, ikincisini az sonraya bırakıyorum :)

Bu sorunun çözümü için iki ayrı yöntem var.

1- Başlat -> Çalıştır -> Drive:\Program Files\Common Files\Microsoft Shared\Help 8\Dexplore.exe.config diyerek Visual Studio .Net 2005'de karşımıza bir sayfa gelir. Bu sayfa yoluyla Visual Studio'nun Browser ayarlarını yapabiliyoruz. Sayfada

<?xml version ="1.0"?>

yoluyla başlayan kodlar silsilesi mevcut. Biz ise

<configuration>

</configuration>

tagleri arasında kalan tüm kodları değiştiriyoruz. Hangi kodlarla? Aşağıdakilerle :)

<configuration>

<startup><

supportedRuntime version="v2.0.50727" safemode="true"/>

<requiredRuntime version="v2.0.50727" safemode="true"/></

startup>

<runtime><

assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<probing privatePath="PublicAssemblies;PrivateAssemblies"/><

dependentAssembly>

<assemblyIdentity name="EnvDTE" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/><

bindingRedirect oldVersion="7.0.3300.0" newVersion="8.0.0.0"/>

</dependentAssembly></

assemblyBinding>

</runtime><

system.net>

<settings><

ipv6 enabled="true" />

</settings><

defaultProxy enabled="true" useDefaultCredentials="true">

<proxy bypassonlocal="True" proxyaddress="http://yourproxy"/></

defaultProxy> </system.net>

</configuration>

Bu satırların arasında öyle bir satır var ki, sorunu kökünden çözüyor. İşte o satır:

<proxy bypassonlocal="True" proxyaddress="http://yourproxy"/>

Şimdi yapmanız gereken tek şey yukarıdaki satırı editlemek. Nasıl? Örneğin;

<proxy bypassonlocal="True" proxyaddress="http://193.9.9.9:8080"/>

İşte bu kadar. Bundan sonra tek yapmanız gereken dosyayı kaydetmek, Visual Studio .Net 2005'i kapatmak ve yeniden açmak.

Deneyin farkı göreceksiniz.

Biraz reklamvari bir slogan oldu ama epeydir bunun çilesini çeken ve şimdi çözümünü bulan bir yazılımcı olarak beni mazur görünüz. Efendim makale gibi oldu, dolayısıyla yazar ve editör olduğum websayfalarında bu konuyu artık görebilirsiniz.

Unutmadan, bir de bu sorunun çok enteresan bir çözümü var. Arkadaş tavsiyesiyle farklı bir pc'de denedim ve hakikaten olduğunu gördüm. Malesef ki kendi laptopumda fayda etmedi. Yinede yazayım.

2- Visual Studio .Net 2005'i açın. View -> Other Windows -> Web Browser diyin ve eğer o anda ilgili websayfasını görüyorsanız anında sorun çözülebiliyor. Real time solution hesabı :) Öncesinde de dediğim gibi, %100 çözüm değil. En sağlıklı çözüm ilk yazdığım kodları editlemekten geçiyor. 

Umarım faydası olmuştur, bir sonraki çözüm/makalemde bu sorunun proje içerisindeki (bilhassa WebRequest işlemlerinde) halini görüp, çözümleyeceğim.

İyi çalışmalar dilerim.

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

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

Etiketler:

Articles | Software | Web

C# 3.0 PictureBox’da PhysicalDimension, PixelFormat ve FrameDimension Özellikleri

Yağız Gönüler tarafından yayınlanmıştır 17. Nisan 2009 07:33

Yine içerisinde sürpriz konu barındıran bir makaleyle C# 3.0’a devam ediyorum.

Bu makalemde amacım PictureBox’a koyduğumuz bir resmin özelliklerini edinmek. Makalenin ilerleyen paragraflarında çok farklı ve işe yarar bir konudan daha bahsedeceğim.

Öncelikle Windows formumuza bir picturebox, 5 label ve 5 textbox ekliyorum. Görüntü aşağıdaki gibi olmalıdır:



Çok sevdiğim bir kitabın kapağını resim olarak ekledim PictureBox’ıma. Şimdi gelelim kodlara. Formumuzun load özelliği dahilinde aşağıdaki kodları yazıyorum;

private void Form1_Load(object sender, EventArgs e)

{

float genislik = pictureBox1.Image.PhysicalDimension.Width;

float yukseklik = pictureBox1.Image.PhysicalDimension.Height;

textBox1.Text = genislik.ToString();

textBox2.Text = yukseklik.ToString();

string piksel_sayi = pictureBox1.Image.PixelFormat.ToString();

textBox3.Text = piksel_sayi.ToString();

System.Drawing.Image resim;

resim = pictureBox1.Image;

textBox4.Text = resim.HorizontalResolution.ToString();

textBox5.Text = resim.VerticalResolution.ToString();

}

İlk ve ikinci textboxa, Picturebox’ın barındırdığı resmin genişliğini ve yüksekliğini yazdırdım. Sonrasında PixelFormat özelliğinden yararlanarak üçüncü textboxa resmin renk sayısını yazdırdım. Son olarak ise System.Drawing sınıfından yararlanarak resmin yatay ve dikey çözünürlüklerini yazdırdım. Böylece picturebox’a atanan bir resmin detaylarını görebileceğiniz bir form oluşturmuş olduk.

Şimdi gelelim sürpriz konuya J

Bir Windows formuna yine picturebox ve bir textbox ekliyoruz. Bu sefer sabit bir resimle değil, hareketli bir .gif resmiyle ilgileneceğiz. Bildiğiniz gibi .gif resimleri birden çok kareden oluşturuluyor. Mesela dalgalanan bir Türk bayrağını düşünün. Kaç kareden oluştuğunu bulmak için yine formun load eventine aşağıdaki kodları yazıyoruz;


System.Drawing.Image resimresim = pictureBox1.Image;

System.Guid[] Anahtar;

Anahtar = resim.FrameDimensionsList;

System.Drawing.Imaging.FrameDimension boyut;

boyut = new System.Drawing.Imaging.FrameDimension(Anahtar[0]);

textBox6.Text = resim.GetFrameCount(boyut).ToString();


Bu kodla çalışma anında PictureBox’a atanan bir .gif resminin kaç kareden oluştuğunu öğrenebiliyoruz.

Kodda öncelikle resimresim adında bir değişken oluşturdum ve pictureboxdaki resmimi bu değişkene atadım. Daha sonra System.Guid sınıfından yararlanarak benzersiz bir anahtar oluşturdum ve Image sınıfının FrameDimensionList özelliğinin içeriğini bu anahtara aktardım. Resimde kaç kare olduğunu GetFrameCount() metodu ile öğrendim. Picturebox’a eklediğiniz resmin kaç kare olduğunu formunuzu çalıştırdığınızda textboxa yazıldığında öğreneceksiniz.


Umarım farklı bir konu üzerinde durmuşumdur. Farklı makalelerde tekrar görüşmek üzere, iyi çalışmalar.


Yağız Gönüler
yagizgonuler@gmail.com


Kaynaklar:

http://msdn.microsoft.com/en-us/library/system.drawing.image.physicaldimension.aspx

http://msdn.microsoft.com/en-us/library/system.drawing.image.pixelformat.aspx

http://msdn.microsoft.com/en-us/library/system.drawing.image.horizontalresolution.aspx

http://msdn.microsoft.com/en-us/library/system.drawing.image.verticalresolution.aspx

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.framedimension.aspx

Memik Yanık – Visual Studio 2008 ile Visual C# 3.0 For .Net Framework 3.5

Bu yazıyı ilk değerlendiren siz olun

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

Etiketler:

Articles | Software | Windows

C# 3.0 RichTextBox’da DetectURL ve LinkClicked Özellikleri

Yağız Gönüler tarafından yayınlanmıştır 17. Nisan 2009 07:23

Uzun zaman aralığından sonra makalelerime C# 3.0 ile ilgili özelliklerle kaldığım yerden devam ediyorum.

RichTextBox’ın C# 3.0 ile gelen bir özelliğinden sizlere bahsetmek istiyorum. Bu özelliğin default özelliği true olduğu için RichTextBox’ın çalışma anında yazılan internet adresleri otomatik olarak linke dönüştürülür. Bunu daha detaylı görebilmek adına Windows formuma bir RichTextBox ekliyorum ve çalışma anında web adresimi yazıyorum.

 














Bu esnada linke tıklanırsa herhangi bir tepki alınmaz. Çünkü RichTextBox nesnesi tarafından link olarak işaretlenen adresin Internet Explorer gibi bir browser ile ziyaret edilebilmesi için bazı işlemleri yapmamız gerekiyor.

Çalışma anında RichTextBox’taki herhangi bir link tıklandığında LinkClicked olayı meydana gelir ve bu olayı temsil eden metot eğer hazırlanmışsa browser bunu algılar. LinkClicked olayını temsil eden metot LinkClickedEventArgs tipinde bir parametreye sahiptir.

Biz de bu parametreleri ve LinkClicked özelliği kullanarak RichTextBox’ımıza yazılan bir web adresinin browserımız tarafından algılanmasını sağlayabiliriz.

Aşağıdaki kodları yazdığımızda gerekli neticeyi alacağız.

private void richTextBox1_LinkClicked_1(object sender, LinkClickedEventArgs e)

        {

            string linkmetni;

            linkmetni = e.LinkText;

            System.Diagnostics.Process.Start(linkmetni);

        }

 

Bu kodda gördüğünüz gibi System.Diagnostics sınıfının Process.Start özelliğinden yararlanıyoruz ve RichTextBox’ımıza yazılan web adresine tıklandığında browserımızın bunu yakalamasını sağlıyoruz. Eğer bu hazırlığı yapmazsak RichTextBox’ımıza yazılan web adresi sadece link halinde duracak ve browserımızın tarafından algılanamayacaktır.

Makalemin içinde bir de sürpriz yapıyorum. Şimdi bir web adresinin RSS dosyasının içeriğini okuyup RichTextBox’a aktaracağım. Yapacağımız tek şey yukarıda görüntüsünü verdiğim forma bir buton ve bir Textbox eklemek ve click olayına aşağıdaki kodları yazmak;

private void button1_Click(object sender, EventArgs e)

        {

            System.Net.HttpWebRequest istek;

            System.Net.HttpWebResponse karsilik;

            istek = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(textBox1.Text);

            karsilik=(System.Net.HttpWebResponse)istek.GetResponse();

            System.IO.Stream akis;

            System.IO.StreamReader okuyucu;

            akis=karsilik.GetResponseStream();

            okuyucu=new System.IO.StreamReader(akis);

            string satir=okuyucu.ReadToEnd();

            richTextBox1.AppendText(satir);

            System.Xml.XmlDocument xml_belge=new System.Xml.XmlDocument();

            xml_belge.LoadXml(satir);

            richTextBox1.Text=xml_belge.InnerText;

        }

 

Amacımız Textbox’ımıza bir rss adresi yazıp butona tıklamak ve ilgili web adresinin bu RSS dosyasının içeriğini RichTextBox’a yazdırmak. Burada özellikle System.Net sınıfının özelliklerinden faydalandım. Öncelikle istek ve karsilik adinda 2 parametre belirledim. Bu parametreler vasıtasıyla TextBox’ımıza yazılan RSS adresine ulaşıp System.IO sınıfının Stream özelliğiyle ilgili karşılığı yakalayıp bir xml dökümanı yardımıyla RSS dosya içeriğini RichTextBox’a attık. Özellikle 2.konu için uygulamalarınızda direkt olmasa da dolaylı olarak çok güzel sonuçlar elde edebileceğiniz bir makale olduğunu düşünüyorum.

Makaleler tam gaz devam edecek. Her sorununuzu benimle paylaşabilirsiniz. Tekrar görüşmek üzere.


Yağız Gönüler
yagizgonuler@gmail.com


Kaynaklar:
http://msdn.microsoft.com/en-us/library/system.io.aspx

http://msdn.microsoft.com/en-us/library/system.net.aspx

http://msdn.microsoft.com/en-us/library/system.xml(VS.71).aspx

Memik Yanık – Visual Studio 2008 ile Visual C# 3.0 For .Net Framework 3.5

Bu yazıyı ilk değerlendiren siz olun

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

Etiketler:

Articles | Software | Windows

Bir yazılımcının 3. ödevi: ScreenSaver

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:54

Aslında not defteri uygulamasıyla bu uygulama arasında kararsız kalmıştım ancak baktım ki not defteri uygulamasında farklı kaynaklarda bolca örnek var. Ekran koruyucusu daha çok ilgi çeker diye hemen hazırlıklara başladım.

 

Tasarım olarak ne kullanacağız diye merak ediyorsunuzdur mutlaka. Cevap veriyorum: Form. Ancak bu formun birkaç özelliği olacak. Bu özellikleri veremezseniz yada vermeyi unutursanız ekran koruyucusundan cevap alamazsınız.

 

Maddeler halinde kullanacağımız formun özelliklerini veriyorum:

 

-Forecolor, Backcolor: Black (Arka plan ve font rengi siyah ayarlanıyor)

-Tranceparencykey: Transparent (Transparan olacak)

-WindowState: Maximized (Form ekranı kaplayacak şekilde ayarlanıyor)

-Opacity: %20 (Şeffaflık yüzde yirmi olarak ayarlanıyor)

-FormBorderStyle: None (Border kabul etmiyoruz)

-AutoScaleMode: Inherit

 

 

Bu özellikler yoluyla formumuz simsiyah olacak ve hiçbir özelliği bulunmayacak. Zaten ekran koruyucusu da çalıştığında ekranımız simsiyah olacak. Bir anlık panikle korkmayınız bu durumdan J

 


Formun görünümünü buraya eklememe gerek yok zira simsiyah bir kutu düşünün aynısı. Görüntü olarak kötü duracağından eklemiyorum.

 


Evet artık kodlara geçiyorum ve burada yine her zaman olduğu gibi “kodların açıklamaları satır aralarında” diyorum. Tıpkı diğer tüm makalelerimde olduğu gibi.

 




'point; x ve y koordinatlarıyla belirlenen nokta objesidir

Dim pnt As New Point

'burada ise yazı tipimizi belirtiyoruz

Dim YaziTipi() As String = {"Times New Roman", "Tahoma", "Verdana", "Arial"}

 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'formun açılışındaki daha doğrusu ekran koruyucusunun aktif hale geçtiği zamanda olacak eylemler

pnt.X = MousePosition.X

pnt.Y = MousePosition.Y 'ilk mouseun ilk standart degerlerını tutuyor

Windows.Forms.Cursor.Hide() 'kursoru gızler

End Sub

 




Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove

' math namespace MATEMATİK

'ABS yuvarlama ıslemını yapıyor

If Math.Abs(pnt.X - e.X) > 6 Or Math.Abs(pnt.Y - e.Y) > 6 Then

Me.Close()

End If

'böylece ekran koruyucusu aktifken mouse hareket ettirildiğinde ekran koruyucumuz kapanıyor

End Sub

 

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

'herhangi bir tuşa basıldığında da formumuz yani ekran koruyucumuz kapanıyor

Me.Close()

End Sub

 

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Static SayacEfekt As Integer ' bir değişken oluşturarak,sayının tutulması saglanıyor

SayacEfekt += 1 'Timer her calıstıgında sayacı bır arttırıyor

If SayacEfekt = 200 Then

SayacEfekt = 50 'sayac 200 olmuşsa onu tekrar 50 yapıyor

End If

 

If SayacEfekt > 20 Then 'sayac 20 den buyukse

'İŞLEMLER YAPILACAK

'----------------------------

Dim grf As Graphics = Me.CreateGraphics

Dim rnd As New Random 'random değer üretmek için

Dim fnt As New Font(YaziTipi(rnd.Next(YaziTipi.Length)), rnd.Next(8, 42))

Dim brs As New SolidBrush(Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255), rnd.Next(255)))

'-----------

ElseIf SayacEfekt <= 20 Then '20 den kucukse 20 den az calısmısa

If Me.Opacity <= 100 Then 'formun goruntü yanı şeffaflık sevıyesı

Me.Opacity += 0.1 'her calıstıgında formu daha gorunur hale getırıyor

End If

End If

End Sub

End Class

 

Umarım 3 seriden oluşan bu makale dizisi işe yarar olmuştur. Ödev aşamasındaki ve uzmanlık yolundaki tüm yazılımcı adayları için ideal örnekler olduğuna inanıyorum. Herkese kolay gelsin, iyi ödevler ve bol şanslar.

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

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

Etiketler:

Articles | Software | Windows

Bir yazılımcının 2. ödevi: Lucky 7

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:53

Daha önceki örneğimizdeki gibi burada da fazla açıklama yapmıycam. Gerekli kod açıklamaları kodların satır aralarında mevcut olacak.

 

Yinede herhangi bir konuda takıldığınız noktalar olursa mail vasıtasıyla bana ulaşabilirsiniz. Aşağıdaki tasarımı yaptıktan sonra projemizde bir imagelist bir de timer nesnesi eklemeyi unutmuyoruz.

 

 

 

Görüldüğü üzere 3 picturebox, 1 button, 1 de sol üst köşede görüldüğü üzere label var.

 

Pictureboxlarda oyunumuzdaki para kazancı olan resimler görünecek.

 

Button oyunu başlatıyor. Oyun bittiğinde kazanılan yada kaybedilen para label1’de belirtiliyor.

 

Tabi tüm bunları sağlayacak timer ve imagelist nesnelerimizi unutmamamız gerek. Bunları da toolbox yardımıyla projemize ekliyoruz. Timer1’in interval değerini 300 olarak ayarladım. Enabled değeri ise false.

 

Imagelist’e istediğiniz herhangi 3 resmi ekleyebilirsiniz. Ben size olarak 100x100 belirttim.

 

 

 

 

Şimdi kodları yazmaya başlıyoruz. Tekrar belirtmemde fayda var –maillerde hep soruluyor- kodların açıklamaları satır aralarında mevcut.

 

 

 

Kolay gelsin diyor ve iyi eğlenceler diliyorum J

 

 

 

'iki değişken tanımlıyoruz

'bunlardan biri elbetteki sayaç

'diğeri ise para değerini tutacak

Dim sayac As Byte

Dim para As Integer

 

Private Sub BtnBasla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBasla.Click

'basla buttonuna tıkladıktan sonra timer'ımız içinde startı veriyoruz

'sayacımızı sıfır olarak belirtiyoruz

Timer1.Start()

sayac = 0

End Sub

 

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

'timerin tick olayına yazdığımız kodlar burada

'3 farklı elemanımız olduğu için byte tipinde 3 değişken tanımlıyoruz

Dim rnd As New Random

Dim index1, index2, index3 As Byte

'rasgele resim sıralarını buluyor , 0,1 ve 2 olabılır

index1 = rnd.Next(0, 3)

index2 = rnd.Next(0, 3)

index3 = rnd.Next(0, 3)

 

'gosterılecek resım olarak imagelistteki rasgele sıradakileri gösteriyor

Resim1.Image = ImageList1.Images(index1)

Resim2.Image = ImageList1.Images(index2)

Resim3.Image = ImageList1.Images(index3)

sayac += 1

'burada ise kazanıp kazanılmadığını belirtiyoruz

'eğer timer durduğunda index1, 2 ve 3 birbirine eşitse

'kazanıldığına dair bir mesaj verip labelımızdaki para değerine +1000 ekliyoruz

If sayac = 10 Then

Timer1.Stop()

If index1 = index2 And index1 = index3 Then

MsgBox("Oleyyy... Yırttın...")

para = para + 1000

Label1.Text = para & "$"

'eğer kaybedildiyse para değerinden 100 düşüyoruz

Else

MsgBox("Yattı....")

para = para - 100

Label1.Text = para & "$"

End If

End If

End Sub

 

Private Sub Slot_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'formumuzun açılışında gerçekleştirecek eylemler burada

'önce bir inputbox vasıtasıyla kullanıcıdan para değeri girmesini istiyoruz

'en düşük para değeri 500 olmalı, onun altındaki değerlerle bu oyun oynanmıyor :)

para = InputBox("PARANIZI GİRİNİZ")

'burada ise eğer para 500'den küçükse paranın yeterli olmadığını belirten bir uyarı ekrana getiriyoruz

've oyunu kapatıyoruz

If para < 500 Then

MsgBox("Paranız yeterli değil, Min=500")

'Application.Exit() ' butun sayfaları kapatıyor

Me.Close()

'aksi durumlarda oyunu başlatıyor ve imageliste resimleri ekliyoruz

'bu arada proje klasörümüzde bir resim klasörü oluşturup 3 resim eklemeyi unutmayalım

Else

Resim1.Image = ImageList1.Images(0)

Resim2.Image = ImageList1.Images(1)

Resim3.Image = ImageList1.Images(2)

End If

End Sub

End Class



Bundan sonraki makalem de yine bir yazılımcının ilk ödevleri arasında yer alan bir program olacak. Ancak bu makaleyi yazdığım sıralarda henüz karar veremedim ne yapacağıma. Umarım işe yarar makalaler olmuştur şimdikiler.

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

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

Etiketler:

Articles | Software | Windows

Bir yazılımcının ilk ödevi: Hesap Makinesi

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:50

Yıl 2002. Visual Studio .Net, Framework ve dilleriyle tanıştığım yıl. İlk yaptığım programlardan biri. Daha doğrusu ödev demeliydim. Yeni başlayanlar için çok ideal..

Program hususunda çok açıklama yapmıycam zira kod açıklamaları zaten satırların arasında yazılı olacak. Yalnız bir windows programı olduğunu, başlıktan da anlaşıldığı gibi visual basic .net ile yazıldığını ve çalışması için .net framework’ün bilgisayarınızda yüklü olması gerektiğini belirtmek isterim.

Programın tasarımı aşağıda gördüğünüz gibi;


Textbox ve Button kontrolleri dışında hiçbirşey yok. Aşağıda kodlar yer almakta. Çok iyi takip ederseniz ilk okuyuşunuzda anlamanız mümkün. Açıklamalarıda sürekli olarak altlarında olacak. Kolay gelsin..

   
'formun load, yani açılış esnasında gerçekleştirilen eylemleri burada

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'd isminde bir değişken tanımladım

        'bu değişkenin tipi double yani tam,kesirli ve ondalık sayılarıları tanimlayabiliyor

        Dim d As Double

        'bir for döngüsü kurdum

        'bu döngü formun açılışın saydamdan belirgine olmasını sağlayacak

        For d = 0 To 1 - 0.1 Step +0.1

            'd'nin degerini 0 olarak tanimladim

            'her 0.1'lik artışta sistemi 5 salise durduruyorumki saydamlık anlaşılsın

            System.Threading.Thread.Sleep(50)

            'burada uygulama 2 iş birden yapabilir hale geliyor

            Application.DoEvents()

            'opacity yani saydamlık derecesini d değişkenine atadım

            Me.Opacity = d

            'programı yeniledim

            'böylece program açılırken en saydamdan en donuk hale geldi

            Me.Refresh()

        Next d

    End Sub

    '3 tane değişken tanımladım

    'islemsecildi değişkeni boolean(evet/hayır) olarak seçtim ve

    'varsayılan olarak "hayır" değerini verdim

    Private islemsecildi As Boolean = False

    'sayi değişkenine sayı değerlerini tutması için double değeri verdim

    Private sayi As Double

    'islem degiskenine metin degeri tutacagi icin string degeri verdim

    Private islem As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click, Button10.Click

        'üzerinde rakam yazan tüm buttonlardan herhangi birine tıklandığında

        'yapılacak işlemleri belirtiyoruz

        If Not islemsecildi Then

            txtsayi.Text &= sender.text

        Else

            'islemsecildinin degeri varsa

            'sayı olarak senderdaki sayıyı atıyoruz

            txtsayi.Text = sender.text

            'daha sonra tekrar islemsecildiyi false olarka belirtiyoruz

            'yani ilk haline döndürüyoruz

            islemsecildi = False

        End If

    End Sub

Private Sub btncarp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncarp.Click, btnbol.Click, btncikar.Click, btntopla.Click

        'çarp, böl, topla yada çıkar buttonlarına basıldığında

        'islem değişkeni çağrımızı yapacağımız sendera işi gönderecek

        islem = sender.text

        'bunu bir try catch kontrolüyle gerçekleştiriyoruz

        Try

            'sayımız, textboxda yazan sayı

            sayi = txtsayi.Text

            'boolean değerli işlemsecildi değişkenimize evet değeri atıyoruz

            islemsecildi = True

        Catch ex As Exception

            'işlem yapıldığında aksi bir durum oluşursa hata mesajı yayınlanacak

            MsgBox("Sayı düzgün formatta girilmedi")

        Finally

            'son olarak işlem düzgün olarak tamamlandığında

            'sayı yazan yer ve sayı hafızası temizlenecek

            txtsayi.Text = ""

            txtsayi.Focus()

        End Try

    End Sub

   

Private Sub btnesit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnesit.Click

        'üzerinde eşittir yazılı buttona basıldıktan sonra bir select case döngüsüyle

        'eşittirden önce çarpı denildiyse çarpıcak, bölü dediyse bölünecek vs..

        Select Case islem

            Case "*"

                sayi *= txtsayi.Text

            Case "/"

                sayi /= txtsayi.Text

            Case "-"

                sayi -= txtsayi.Text

            Case "+"

                sayi += txtsayi.Text

        End Select

        'döngü bittiğinde sayı, textboxa yazdırılacak

        txtsayi.Text = sayi

    End Sub

   
Private Sub btntemizle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btntemizle.Click

        'üzerinde c yazan temizle butonuyla hem textboxı boşaltıyoruz

        'hemde hafızadaki sayıyı sıfırlıyoruz

        sayi = 0

        islemsecildi = False

        txtsayi.Text = ""

        txtsayi.Focus()

End Sub

Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnkapa.Click

        'kapat buttonuna tıklandığında nasıl form açılırken en saydamdan

        'en donuğa geliyorsa bundada aynısı oluyor

        'dolayısıyla kod açıklamalarını tekrar yazmıyorum

        Dim d As Double

        For d = 1 To 0 + 0.2 Step -0.2

            System.Threading.Thread.Sleep(50)

            Application.DoEvents()

            Me.Opacity = d

            Me.Refresh()

        Next d

        'burada programı kapatıyoruz

        Environment.Exit(0)

    End Sub






Private
Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

        'programın güzel özelliklerinden biri mouse kullanmadan da rakamların girilebileceği

        'ancak numpad değerlerinin sadece pclerde çalışacağını, laptoplarda olmayacağını belirteyim

        Select Case e.KeyCode

            'klavyeden 0'a basıldığında textboxa rakamı yazacak

            'diğer tuşlalarda da aynı işlem gerçekleşecek

            Case Keys.NumPad0

                txtsayi.Text = 0

            Case Keys.NumPad1

                txtsayi.Text = 1

            Case Keys.NumPad2

                txtsayi.Text = 2

            Case Keys.NumPad3

                txtsayi.Text = 3

            Case Keys.NumPad4

                txtsayi.Text = 4

            Case Keys.NumPad5

                txtsayi.Text = 5

            Case Keys.NumPad6

                txtsayi.Text = 6

            Case Keys.NumPad7

                txtsayi.Text = 7

            Case Keys.NumPad8

                txtsayi.Text = 8

            Case Keys.NumPad9

                txtsayi.Text = 9

        End Select

    End Sub

End Class

Bundan sonraki makalem yine bir yazılımcının ilk ödevleri arasında yer alan bir program olacak.

Bu yazıyı ilk değerlendiren siz olun

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

Etiketler:

Articles | Software | Windows

Ajax ile DropDownList'ten DataList'e veri aktarma

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:49
Bu makalemle birlikte, forumlarda en çok sorulan sorulardan birine cevap buluyoruz..

 

Ne zamandır bu makaleyi yazmak istiyordum zira her forumda mutlaka veritabanından dropdownliste, oradan da dataliste veri aktarımı işlemi daima sorulur çünkü daima böyle bir sisteme ihtiyaç duyulur. Bu tip sistemlere birkaç örnek vermek gerekirse; bazı sitelerin üyelik formlarında bulunan il ve ardından ile göre yüklenen ilçe seçim işlemi, bankaların il ve ardından ilçeye göre gelen şube seçimi ve alışveriş sitelerindeki kategori seçimlerini söyleyebiliriz.

 

Sayfayı tekrar yüklemeden daha hızlı veri alışverişi yapabilmenin en keyifli yolu elbette ki Ajax teknolojisinden faydalanmak. Bu uygulamada Asp.Net Ajax ve Microsoft Access’den faydalandım. Mutlaka işinize yarayacak bir makale olacaktır.

 

Öncelikle design sayfama Script Manager, Update Panel, 1 Label, 1 DropDownList, 1 DataList ve 2 AccessDataSource ekliyorum.

Amacım sayfa yüklenirken DropDownList’e makalelerimi getirmek ve daha sonra makale seçildiği zaman içeriği DataList’te görüntülemek.

Access veritabanımda MakaleID, MakaleBaslik ve Makale isimli 3 alanım var. Tüm bu hazırlıklardan sonra sayfa görüntüm şu şekilde olacak:

 



Label1’de Makale başlığı yazıyor. DropDownList’in adı DDGittigimYerler. AccessDataSource’ların isimleri ise yanlarında yazıyor. Şimdi html tarafındaki kodlamalara geçelim. Kodların sonunda açıklama yapacağım.

 

<asp:UpdatePanel ID="UpdatePanel1" runat="server">


<ContentTemplate>


<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Names="Verdana" Font-Size="Medium" Font-Underline="False" ForeColor="Crimson" Text="Makale Başlığı :"></asp:Label>


<asp:DropDownList ID="DDGittigimYerler" runat="server" AutoPostBack="True" DataSourceID="SQLDDGittimYerler" DataTextField="MakaleBaslik" DataValueField="MakaleID" Width="560px" Font-Bold="True" Font-Names="Verdana" Font-Size="Small" ForeColor="Black">


</asp:DropDownList>


<asp:DataList ID="DataList1" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" DataKeyField="MakaleID" DataSourceID="SQLListGittimYerler" Font-Names="Verdana" Font-Size="Small" ForeColor="Black">


<ItemTemplate>


<asp:Label ID="MakaleLabel" runat="server" Text='<%# Eval("Makale") %>'></asp:Label><br />


</ItemTemplate>


</asp:DataList>

 

<asp:AccessDataSource ID="SQLDDGittimYerler" runat="server" DataFile="~/contact.mdb" SelectCommand="SELECT [MakaleID], [MakaleBaslik] FROM [tbl_makale]"></asp:AccessDataSource>

 

<asp:AccessDataSource ID="SQLListGittimYerler" runat="server" DataFile="~/contact.mdb" SelectCommand="SELECT [Makale], [MakaleID], [MakaleBaslik] FROM [tbl_makale] WHERE ([MakaleID] = ?)">

 

<SelectParameters>

<asp:ControlParameter ControlID="DDGittigimYerler" Name="MakaleID" PropertyName="SelectedValue" Type="Int32" />

</SelectParameters>

</asp:AccessDataSource>


</ContentTemplate>


</asp:UpdatePanel>

Teker teker açıklamaları yapayım. Çok karmaşıkmış gibi görünsede aslında oldukça kolay bir düzenlemesi var kod bloklarının.

 

İlk olarak Label tagi var. Burada Makale Başlığı yazıyor.

Daha sonra DropDownList tagi var. Burada dikkat edilmesi gereken nokta; DataSourceID="SQLDDGittimYerler" DataTextField="MakaleBaslik" DataValueField="MakaleID" ayarlarıdır. Çünkü DropDownList ile DataList’in veri kaynakları farklıdır. DropDownList, MakaleBasligini ekrana getirirken, değerini MakaleID’den alıyor, ayrıca 1. AccesDataSource’a bağlı. Bunları belirttik.

 

Sonraki tag Datalist ile ilgili. Malum 2 kontrol de altalta olduğu için kodlamaları peşpeşe oluyor. Burada da dikkat edilmesi gereken nokta; DataKeyField="MakaleID" DataSourceID="SQLListGittimYerler" ayarlarıdır. DataList kaynağını 2. AccessDataSource’dan alır.

ItemTemplate taginde Makale içeriğini ekrana yansıtacak olan Label ayarları yapılıyor. Burada Text='<%# Eval("Makale") %>' diyerek Makale isimli veritabanı kolonundan kaynağını alacağını belirtiyoruz.

 

Sonra 1.AccessDataSource’umuzu ayarlıyoruz. SelectCommand="SELECT [MakaleID], [MakaleBaslik] FROM [tbl_makale]" diyerek dropdownlist’e sadece makale başlığını aktarıyoruz.

 

Hemen ardından 2.AccessDataSource’umuzu ayarlıyoruz. Burada da SelectCommand="SELECT [Makale], [MakaleID], [MakaleBaslik] FROM [tbl_makale] WHERE ([MakaleID] = ?)" diyerek Makale içeriğini belli bir kritere göre dataliste aktaracağımız ayarları yapıyoruz. Kriteri ise bundan sonraki satırda belirtiyoruz.

 

SelectParameters taginde MakaleID isimli veritabanı alanının, DropDownList için geçerli ana kaynak olacağını belirtiyoruz. PropertyName="SelectedValue" Type="Int32" belirledikten sonra taglerimizi kapatıp işin çalışma kısmına geçiyoruz.

Ben DropDownList’in hemen altındaki Label yardımıyla toplam kaç adet makale bulunduğunu da kullanıcılarıma sunuyorum. Bunun içinde code behind’da kullandığım kodlar şu şekilde:

 

Protected Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Form1.Load

 

Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("veritabani.mdb"))

Dim com As New OleDbCommand("SELECT COUNT(*) FROM tbl_makale", con)

con.Open()

Dim toplam As String

toplam = com.ExecuteScalar

lblsayi.Text = toplam

con.Close()

 

End Sub




Yazılım Geliştirme’de profesyonelliğe doğru adım attığımda ilk zorlandığım konulardan biri buydu. İnsan farklı alanlarda bunu kullandıktan sonra uzmanlaşıyor elbette. Umarım siz de bu makale yardımıyla artık bu tarz sorunların kolayca üstesinden gelirsiniz.

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

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

Etiketler: , ,

Articles | Software | Web

Web Güvenliği - 2

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:47

 

Önceki makalede kimlik denetimini, belirli bir kaynağa erişim vermek veya kısıtlamak için yetkilendirme ile beraber kullanılan, kullanıcının tanımlanması olarak tarif etmiştik.

 

 

Kimlik Denetimi ve Yetkilendirme

Bir kullanıcının kimlik denetimini yapmak için birden fazla yol vardır ve bazen bir alışveriş sitesi örneğindeki gibi kullanıcılara, kaynaklara herhangi bir yetkilendirme olmadan da erişim izni vermek istersiniz. Bu makalede kimlik denetimi ve yetkilendirme konusunu sadece Microsoft Internet Information (IIS) üzerinde örneklendireceğim. Normalde Unix veya Linux üzerinde çalışan açık kaynaklı Apache sunucusunun da kimlik denetimi ve yetkilendirme sürecini tartışmak gerekebilirdi. Ancak sitemizin ve bizlerin .Net tabanlı çalıştığını düşünürsek IIS üzerinde konuşmak daha güvenilir olacaktır.

 

IIS ve Asp.Net’te Kimlik Denetimi ve Yetkilendirme

IIS ve Asp.Net, biz .Net geliştiricileri için 2 amiral gemidir. İkisi de zengin güvenlik özellikleriyle donatılmış özelliklere sahiptir. Genel olarak IIS ilk kontrolleri yapar ve kullanıcı bu ilk engelin üstesinden gelirse ve istenen kaynak, mesela bir ASPX sayfası gibi Asp.Net tarafından yönetiliyorsa Asp.Net güvenlik denetimi devreye girer.

 

Bir dosya’ya erişim izninin verilmesi veya verilmemesi ile ilgili son karar NTFS (New Technology File System - Yeni Teknoloji Dosya Sistemi) izinlerinin ve ilgili web.config dosyasındaki yetkilendirme kodlarının bir birleşimi tarafından verilir.

 

Dosyalar; okuma, değiştirme ve silme gibi spesifik işlemler için kısıtlanabilir veya izin verilebilir. Bu izinler Windows Explore, kod veya scriptler aracılığıyla programlamayla veya Active Directory kullanılıyorsa Group Policy (Grup Politikası) ile de ayarlanabilir. Web.config dosyası aracılığıyla ayarlanan izinler aşağıdaki gibi bir <authorization> öğesi eklenerek yapılandırılır:

 

<configuration>

<system.web>

<authorization>

<allow users="etkiAlaniAdi\kullanici1, kullanici2"/>

<deny users="*"/>

</authorization>

</system.web>

</configuration>

Burada kullanici1 adındaki bir etki alanı hesabına ve kullanici2 adındaki yerel bir hesaba erişim yetkisi verildiğini görüyoruz. Diğer tüm kullanıcılar ise yasaklanmış bulunuyor. Web.config dosyası, web uygulamasının köküne veya spesifik bir klasöre yerleştirilebilir.

 

Kısa olarak belirtmek gerekirse gelen ilk isteği IIS yönetir ve IP adresinin ve istemcinin etki alanının izin verilen listede olup olmadığını kontrol eder.

Daha sonra ise, kimlik denetimin olup olmadığını kontrol eder.

 

İstenen kaynak Asp.Net tarafından kontrol ediliyorsa, istemcinin kimlik denetimi yapılmış belgeleriyle birlikte Asp.Net çalışma sürecine aktarılır.

 

Aktarılma esnasında olumsuz bir duruma izin verilirse, tüm yetkilendirme istekleri için gerçek istemci belgeleri veya anonim erişim etkinleştirildiyse daha önce bahsedilen anonim hesap kullanılır. Eğer olumsuz bir durum yoksa, kullanılacak hesap Framework kurulum klasöründe bulunban .Net Framework machine.config dosyasında belirtilen hesap olur. Bu hesap, gerektiğinde değiştirilebilir, çok az ayrıcalığa sahip yerel bir hesaptır.

 

Web.config dosyalarında görebileceğiniz identity tagleri bundan ibarettir.

 

<identity impersonate="true">

 

Bu durumda istemci kimlik belgeleri kullanılır. Alternatif olarak belirli bir kullanıcı belirlenerek tüm isteklerin bu kullanıcıyla yetkilendirilmesi sağlanır.

 

<identity impersonate="true" name="domain\user" password="securePassword">

 

Dikkat: Kullanıcı adları düz metin halinde depolanıyorsa büyük bir güvenlik riski oluşur. Bu ayarları şifrelemek için Microsoft tarafından aspnet_setreg.exe adında bir araç sağlanmıştır. Bu araç hakkındaki her şeye makalenin sonundaki kaynaklar bölümünden ulaşabilirsiniz.

 

 

IIS ve Asp.Net’te Farklı Kimlik Denetimi Yöntemleri

Bu konuda öncelikle IIS’in durumuna ve ihtiyaçlarına göre doğru biçimde bir yapılandırma oluşturmalıyız. Bundan sonra da Asp.Net’i yapılandırıp özelleştirebiliriz. Şimdi ilk olarak IIS’i, ardından da Asp.Net kimlik denetimlerini detaylandırıyorum.

 

IIS Kimlik Denetimini Yapılandırmak

Bu konuda daha önce bahsettiğim anonim kimlik denetimi en yaygın olandır. Birçok site kullanıcılarının ana sayfaya veya diğer kısımlara bir kullanıcı adı ve parola olmadan erişmesine izin verir. Anonim kimlik denetimini etkinleştirmek için Web sitemizin Properties kısmından iletişim kutusunu açıp Directory Security sekmesini tıklayın. Authentication and Access Control Group’unda Edit buttonunu tıklayın ve Enable Anonymous Access onay kutusunu işaretleyin.

 

Bir başka seçenek ise gerektiğinde kullanıcı adının ve parolasının düz metin halinde gönderileceği anlamına gelen temel kimlik denetimi (basic authentication) bulunur. Bu seçenek SSL etkinleştirilmediği müddetçe zayıf bir seçimdir.

 

Son seçenek Passport Authentication (Pasaport kimlik denetimi)’ı etkinleştirmektir. Bu birçok site için kullanıcı adı ve parolalarının senkronize edildiği Microsoft tarafından barındırılan merkezi olarak yönetilen bir servistir. Passport etkin bir sitede imzalandığında, kullanıcının bu tip uygulamaların hepsi için kimlik denetimi yapılmış olur.

 

Passport’un devamı olan Windows CardSpace yakın zamanda Microsoft tarafından başlatılmış olan bir sistemdir. Ayrıntılarına makalenin sonundaki kaynaklar bölümünden ulaşabilirsiniz.

 

Kimlik denetimini kontrol etmek için Asp.Net kullanırken özellikle kamuya açık web siteleri için standart yaklaşım IIS’te anonim erişime izin vermektir.

 

Asp.Net Kimlik Denetimlerini Yapılandırmak

Asp.Net, 4 tane kimlik denetimini destekler; Forms, Windows, Passport ve hiçbiri veya özel. Bir kimlik denetimini ayarlamak için aşağıdaki öğeyi web.config dosyasına eklemek yeterli:

 

<authentication mode="Forms|Windows|Passport|None"></authentication>

 

Forms: Kullanıcıdan, kullanıcı tarafından oluşturulmuş web sayfası aracılığıyla bir kullanıcı adı ve parola girmesi istenir. Ayrıntılar genellikle bir veritabanıyla karşılaştırılır.

 

Windows: İstemcinin kimlik belgelerini kullanır ve daha önce bahsedildiği gibi normalde sadece şirket intranetleri gibi dahili sitelerde kullanılır.

 

Passport: Merkezi olarak yönetilen Microsoft Passport sistemidir.

 

None: Tamamen kendi özel kimlik denetimi sistemimizi kullanmak için bu kip kullanılır. Bundan sonra IIS kimlik denetimi devam etse de, Asp.Net daha fazla kontrol işlemi gerçekleşmez.

 

 

Web Güvenliği makaleleri burada bitmedi, mutlaka devamı olacaktır.

 

Tekrar görüşmek üzere, iyi çalışmalar dilerim.

 

 

Kaynaklar:

http://msdn2.microsoft.com/en-us/library/ms178477.aspx

http://msdn2.microsoft.com/en-us/library/aa480189.aspx

Web 2.0 Teknolojileri – Eric Van Der Vlist, Danny Ayers, Erik Bruchez, Joe Fawcett, Alessandro Vernet

2 kişi tarafından 3.5 olarak değerlendirildi

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

Etiketler: , ,

Articles | Software | Web | Web Security

Web Güvenliği - 1

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:46
Özette bahsettiğim “ilk zamanlar”da, kullanıcı sisteme bir kullanıcı adı ve parolo ile girer ve işini görüp çıkardı. İlgili birçok insan için bu çok derin bir konuydu. Ancak sistemlerin açık ve özgür olmasını isteyen kesim, güvenliğin çok bunaltıcı olduğunu belirtip kendi “dava”larına özel bir yol çizdiler.

 

Bu makalem, diğer web güvenliği makalelerinden çok farklı olucak. Çok az, beklide hiç kod görmeyeceksiniz. Amacım, bu önemli konuyu mantıklara daha “sosyal” bir biçimde kazımak olacak. Kemerlerinizi bağlayın..

 

Güvenlik

İki tip güvenlik vardır diyebiliriz. Bunlardan ilki dosya ve uygulamaları koruyan kaynak güvenliği, ikincisi ise mesajları güvenli bir biçimde göndermek için kullanılan mesaj güvenliği. Artık güvenlik bu iki öğe üzerine kuruludur. Dilerseniz biraz daha detaylandıralım..

 

Kaynak Güvenliği

Kaynak güvenliği, iki temel zorunluluk olan kimlik denetimi ve yetkilendirme ile birlikte kullanılır.


Kimlik denetimi, tamamen kullanıcının tanımladığı bir süreçtir. Bu süreçte kullanıcı adı ve paroladan daha güvenilir bir sistem için akıllı kart gibi fiziksel bir aygıtın kullanımına veya sıranın en üstünde bir parmak izi tarayıcısı gibi biyolojik bir ölçüme sahip olmak gerekebilir. Bu konuda verilebilecek en güzel örnek, bir havaalanındaki kimlik denetimidir. Yolcunun kimlik denetimini gerçekleştirmek için pasaportunu göstermesi yeterlidir. Pasaport onayından sonra verilecek yetkiye göre yolcu uçuş yada geçiş iznine sahip olur.

 

Yetkilendirme, kimlik denetimi yapılmış bir kullanıcıya belirli bir dosya veya bir uygulamanın kullanımı gibi belirlenen bir kaynak için iznin verilip verilmeyeceğini belirler. Yetkilendirme genellikle gruplarla yapılır. Yönetici grubu tüm sistemi rahatlıkla izleyebilirken, çalışanlar grubu sadece kendi grubu dahilindeki bilgilere ulaşır. Havaalanındaki örneği devam ettirecek olursak, pasaport kontrolü yapılmış yolcunun, yolcu listesi ile karşılaştırılarak bilet aldığından emin olunmasını söyleyebiliriz.

 

Mesaj Güvenliği

Üç hedefi vardır. Bunlar gizlilik, güvenilirlik ve doğruluktur. Bu amaçlar, karşılıklı bir mesajlaşma sürecinde geçerliliğini korur.

 

 

Gizlilik, sadece belirtilen alıcının mesajları okuyabilmesi yada işleyebilmesi amacına bağlıdır. Bu yönüyle bir kimlik denetimini işin içine sokabilir.

 

Güvenilirlik, alıcının mesajın kaynağından gelip gelmemesine emin olmasıdır. Örneğin online bankacılık sisteminde, kişiye hangi hesaptan para geldiği yada hangi hesaba para gönderildiği çok önemlidir. Burada kimlik denetimi çok önemli bir rol oynar.

 

Gelen yada giden her bir mesajın doğruluğu, mesajın ilgili yere değiştirilmeden ulaşmasından sorumludur. Online veri transferlerinde verinin yol üzerinde değişmeden, türünü değiştirmeden aynen belirtilen adrese ulaşması güvenlik açısından son derece önemlidir.

 

Elbette ki tüm bunlar dışında 2 güvenlik yolu daha vardır. Bunlardan ilki, makinelerinizi virüslere, trojanlara ve diğer kötü yazılımlara karşı korumak için kullanılan donanımsal güvenliktir. Diğeri ise takdir edersiniz ki kod güvenliğidir. Kodunuzun istenmeyen görevleri gerçekleştirmek üzere çökertilmemesi veya değiştirilmemesi çok önemlidir. Aksi takdirde çıkan sonuçtan sorumlu siz tutulursunuz. Örneğin bir bankanın veritabanından sorumlusunuz ve yapmakta olduğunuz sql enjeksiyonu tam tersi yönde çalışmakta, verilerinizi yok etmektedir. İşte burada kod güvenliğinin ne kadar öneme sahip anlamak çok kolaydır.

 

Tüm bunların dışında, özellikle son 5 yılda web servislerinin güvenliğiyle de alakalı çözümler geliştirilmekte ve duyurulmaktadır.

 

Maziden alınan çok önemli dersler

Hiç şüphesiz ki alınan en büyük ders, erken alınmayan tedbirler ve standart teknikler konusundadır.

 

Erken tedbirler, yeni bir sistemi oluştururken tüm güvenlik konularının her şeyden önce göz önüne alınması gerekliliğidir. Güvenliği sonraya bırakan bir sistemin ne kadar güvenli olacağını hepimiz tahmin edebiliriz. Güvenliği başlangıç yerine ikinci plana atarsak hem daha sonrası için zaman kaybederiz, hem de büyük miktarda kod değişikliklerine yol açarız.

 

Standart teknikler, güvenilirlik, tehlikeye karşı zayıflık ve kusurlar açısından incelenmiş olan tekniklerdir. Az tanınmış tekniklere daha fazla önem veren web geliştiricileri, tarihin en büyük derslerini almıştır. Bu tekniğe örnek, birkaç yıl önceki telefon sisteminden gelir. Telekomunikasyon Mühendisleri, arama yapmadan önce özel bir erişim kodu girerek ücretsiz aramalar yapabiliyorlardı ve bu hat kontrolü için kullanılıyordu. Web, popüler olmadan önce bu kod sadece çok az kişi tarafından biliniyordu. Bununla birlikte online olarak yayımlandıklarında binlerce insan telefon şirketinin zararına aramalar gerçekleştirebiliyordu. Bu sistemdeki kusur sadece erişim kodu olan bir bilgi parçasının bilinmesine dayanan kimlik denetimi ve yetkilendirme zayıflığından kaynaklanıyordu.

 

Katmanlı Yaklaşım

En önemli sistemler, güvenlik konusunda bu katmanlı yaklaşımı uygularlar. Sistemlerin sadece uygun insanlar tarafından kullanılabileceğinden emin olmak için tek bir özelliğe dayanmazlar.

 

 

Örneğin, sürekli e-mail gönderen bir şirketi ele alalım;

 

  1. Kullanıcı iş yerine varır. Fiziksel erişimden önce mutlaka kart gibi bir aygıtı görevliye göstererek şirkete girişini gerçekleştirir.
  2. Kullanıcı oturumunu açar. Bu, işe bir kullanıcı adı ve parola aracılığıyla kimlik denetimini devreye sokar ve bazı durumlarda akıllı kart gibi bir aygıta da gereksinim duyar.
  3. Kullanıcı Microsoft Outlook gibi bir programı açar. Bu noktada yetkilendirmek genellikle kullanıcı için otomatik olarak yapılır. E-Mail sistemi, halihazırda oturum açmış olan kullanıcının sistemi kullanmasına müsaade edildiğini kontrol eder.
  4. Kullanıcı yeni bir e-mail oluşturur ve gönderir. Bazen bu mesajı dijital bir şekilde imzalar ve içeriği de Public Key Infrastructure (Açık Anahtar Altyapısı – PKI) kullanarak şifreleyebilir.
  5. E-Mail ilk olarak kimlik ve yetkilendirme denetiminden sonra şirketin güvenlik duvarını aşarak alıcının e-mail kutusuna gönderilir.
  6. Alıcının e-mail sunucusu, e-mail adresinin geçerli olup olmadığını kontrol eder.
  7. E-Mailin virüs veya zararlı bir dosya taşıyıp taşımadığını kontrol eder.
  8. Bu son noktada alıcı, göndericinin yaşadığı sürece benzer şekilde bir oturum açma sürecinden geçer ve e-maili görüntüler.

 

Bu örnek, sistem için bir tek güvenlik noktası olmadığını göstermektedir ve dolayısıyla bir tek saldırı noktası da yoktur. Kötü niyetli bir kullanıcının, başka birisinden geldiğini iddia eden imzalı bir e-mail göndermek için bir bilgi parçasından daha fazlasına ve bazen fiziksel bir kimlik denetimi aygıtına ihtiyacı olur. Verdiğim bu örnekte Microsoft Outlook gibi bir desktop uygulamasından gönderildiği ve e-mail sunucusunun posta göndermek için sadece şirketinde intranetinden erişilebilir olduğunu varsaydım.

 

 

Makalemin ilk bölümü bu kadar. İkinci bölümde kimlik denetimi ve yetkilendirme başlığını genişletip, IIS ile Asp.Net’te kimlik denetimi ve yetkilendirmeye değinicem.

 

 

Tekrar görüşmek üzere, iyi çalışmalar dilerim.

 

 

Kaynaklar:
http://www.w3.org/Security/Faq/

http://www.w3schools.com/site/site_security.asp

Web 2.0 Teknolojileri – Eric Van Der Vlist, Danny Ayers, Erik Bruchez, Joe Fawcett, Alessandro Vernet

 

Bu yazıyı ilk değerlendiren siz olun

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

Etiketler: ,

Software | Web | Web Security | Articles

JSON (Javascript Object Notation) ve ASP.Net

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:45
Bu konuyu daha derinlemesine görüp öğrenebilmek için JSON.Net isimli bir kütüphane kullanacağız. Bu kütüphaneyi aşağıdaki linkten ücretsiz olarak indirebilirsiniz:

 

http://www.codeplex.com/Json/Release/ProjectReleases.aspx?ReleaseId=6987

 

İlgili kütüphaneyi indirdikten sonra kütüphaneye ait DLL dosyasını ASP.Net projemize referans olarak ekliyoruz ve ardından kodlamaya geçiyoruz. Kodların açıklamaları satır aralarında yer alacaktır.

 

Özellikle bu bölüme dikkat. Sayfa başında sadece Page Language kısmı yer almalı.
<%@ Page Language="VB" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Bir script oluşturup runat=server belirtiyoruz.

Ardından Kisiler isimli classımızı yaratıyoruz.

<script runat=server>

 

Class Kisiler

Private pAdi As String

Private pSoyadi As String

Private pUyrugu As String

Private pMeslegi As String

 

Sub New()

 

End Sub

 

Sub New(ByVal OAdi As String, ByVal OSoyadi As String)

Me.Adi = OAdi

Me.Soyadi = OSoyadi

End Sub

 

Property Adi() As String

Get

Return pAdi

End Get

Set(ByVal value As String)

pAdi = value

End Set

End Property

 

Property Soyadi() As String

Get

Return pSoyadi

End Get

Set(ByVal value As String)

pSoyadi = value

End Set

End Property

 

Property Uyrugu() As String

Get

Return pUyrugu

End Get

Set(ByVal value As String)

pUyrugu = value

End Set

End Property

 

Property Meslegi() As String

Get

Return pMeslegi

End Get

Set(ByVal value As String)

pMeslegi = value

End Set

End Property

 

End Class


Classımızı oluşturduktan sonra page load olayında kisiler sınıfımızı kullanarak

Bir kisi olusturuyoruz ve degerlerini atiyoruz

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

Dim kisi As New Kisiler()

kisi.Adi = "Steve"

kisi.Soyadi = "Ballmer"

kisi.Uyrugu = "United States"

kisi.Meslegi = "Microsoft CEO"

Bu bölümde ise JSON kütüphanemizden ve dllimizden yararlanıyoruz

Amacımız kisi parametresine atadığımız değeri JSON.Net’i kullanarak

Bir labelde kullanıcıya JSON verisi olarak göstermek.

Dim JSON As String = ""

JSON = Newtonsoft.Json.JavaScriptConvert.SerializeObject(kisi)

label1.Text = JSON

End Sub

</script>

Bu bölümde ise yazdığımız ekstra bir şey yok.

Sadece bir label işimizi görüyor.

<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></div>

</form>

</body>

</html>

 

 

 

Gördüğünüz gibi JSON.Net’i kullanarak bir JSON verisi oluşturmak son derece kolay. Aslında daha açık konuşmak gerekirse çok keyifli bir konu JSON. Eğer işi orta seviyenin üzerine çıkarabilirseniz XML yerine JSON’u tercih edebilirsiniz. Bir çok avantajını JSON ile ilgili daha önceki makalelerimde belirtmiştim. Umarım bu 3 makalenin hepimize bir faydası olur ve projelerimizde kullanırız.

 

Farklı makalelerde tekrar görüşmek üzere.

 

 

 

Kaynaklar:

# ASP.Net AJAX – Daron Yöndem

# www.json.org

Bu yazıyı ilk değerlendiren siz olun

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

Etiketler: , , ,

Software | Web | Articles

JSON (Javascript Object Notation) ve JSON veri kaynağı kullanımı

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:43
 

JSON bir javascript obje ve veri saklama metodudur. Özellikle Web 2.0 ile birlikte JSON, Ajax’la daha fazla kullanılmaktadır. Bunun sebebi JSON ile düzenlenmiş veri yapısının Javascript komutları ile daha kolay ve daha hızlı bir şekilde erişim sağlanılabilir düzeyde olmasındandır.

 

JSON, XML ile kıyaslandığında daha az kod yazılan ve daha az yer kaplayan özelliklere sahiptir. Birtakım web projelerinde 10 mb yer kaplayabilen xml dosyaları JSON ile 3 mb gibi çok daha küçük bir yer kaplayabilir hale getirilebiliyor. Bunun sebebi JSON’da hücre taglerinin ve veri isimlerinin tekrar tekrar yazılmamasıdır.

 

Küçük bir örnekle JSON ile XML arasındaki farklılıklara değinmek istiyorum. Aşağıdaki 2 örneğe dikkatlice bakınız.

 

{

futbolcudata:{

 

futbolcular; [

{

adi:’Metin’,

soyadi:’Oktay’

},

{

adi: ‘Hakan’,

soyadi: ‘Sukur’

}

]

}
}

 

 

Yukarıdaki JSON verisinin bir de XML haline göz atalım.

 

<futbolcudata>

<futbolcular>

<adi>Metin</adi>

<soyadi>Oktay</soyadi>

</futbolcular>

<futbolcular>

<adi>Hakan</adi>

<soyadi>Sukur</soyadi>

</futbolcular>

</futbolcudata>

 

 

Görüldüğü gibi xml ile çok daha fazla veri yazılıyor, tagler tekrarlamak ve kapatılmak zorunda kalıyor. Bir de bunun büyük projelerde yapıldığını düşünürsek kaybedilen alan ve zaman elbette artıyor.

 

Şimdi ise JSON verilerinin yazılışında dikkat etmemiz gereken kurallara bir göz atalım.

 

Objeler: Süslü tırnak işaretleriyle başlar ve biterler. {}

 

Obje üyeleri: Birbirlerinden iki nokta ile ayrılmış isim ve diğer çiftlerden oluşurlar. Birden fazla obje üyesi birbirinden tırnak işaretiyle ayrılır.

 

Diziler: Köşeli tırnak işaretleriyle başlarlar ve biterler. [] Sıralı değer verileri birbirinden tırnak işareti ile ayrılır.

 

Değerler: Karaktersel, sayısal, obje, dizi veya true, false ve null olabilirler.

 

 

 

JSON veri kaynağının kullanımı

 

Yukarıda yazmış olduğum futbolcu isimlerini barındıran JSON verisini bir txt dosyasına kaydederek bir kenarda saklayalım. Ben ismini json.txt olarak veriyorum. Şuanda yapacağımız uygulamada bize lazım olacak.

 

Şimdi ise visual studio.net yoluyla bir ajax web page oluşturalım ve aşağıdaki kodları yazalım. Kodların satır aralarında açıklamaları yer almaktadır.

 

 

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>AJAX JSON</title>

 

<script type="text/javascript" language=javascript>

function XMLHTTPObjesi()

{

var XMLHTTP = null;

try

{

XMLHTTP = new ActiveXObject("Msxm12.XMLHTTP");

}

catch (hata)

{

try

{

XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");

}

catch (hata)

{

if (typeof XMLHttpRequest != "undefined")

{

XMLHTTP = new XMLHTTPRequest();

}

}

}

return XMLHTTP;

}

 

function dinleyici()

{

if (TalepObjem.readyState ==4 &&

TalepObjem.status == 200)

{

 

//verimiz geliyor

Gelen = TalepObjem.responseTezt;

//tabloyu aktaracağımız katman

var konum = document.getElementById("icerik");

//verimizi bir javascript objesine dönüstürüyoruz

eval("var json = " + Gelen + ";");

//tablomuzu olusturuyoruz

var tablo = document.createElement("table");

//her satiri tarayacak döngümüzü baslatiyoruz

for(var x = 0; x < json.futbolcudata.futbolcular.lenght; x++)

{

//tablo satırı olusturalım

satirim = document.createElement("tr");

//kolon olusturalım

hucrem = document.createElement("td");

//isim yazalim

metin = document.createTextNode(json.futbolcudata.futbolcular[x].adi);

//ismi hücreye ekleyelim

hucrem.appendChild(metin);

//kolonu satira ekleyelim

satirim.appendChild(hucrem);

//kolon olusturalim

hucrem = document.createElement("td");

//soyadi yazalim

metin = document.createTextNode(json.futbolcudata.futbolcular[x].soyadi);

//ismi hücreye ekleyelim

hucrem.appendChild(metin);

//kolonu satira ekleyelim

satirim.appendChild(hucrem);

//satiri tabloya ekleyelim

tablo.appendChild(satirim);

}

konum.innerHTML = "<table border='1'>" + tablo.innerHTML + "</table>";

}

}

 

var TalepObjem = XMLHTTPObjesi()

 

function tablo_getir()

{

TalepObjem.open("GET", "json.txt");

TalepObjem.onreadystatechange = dinleyici;

TalepObjem.send(null);

}

 

 

</script>

</head>

<body>

<form id="form1" runat="server">

 

<div>

<input onclick="tablo_getir();" id="Button1" type=button value="button" /><br />

<div id="icerik"></div>

</div>

</form>

</body>

</html>

 

AjaxJSON olarak kaydettiğim bu örnekte HTML butonuna tıklandığında AJAX ile sunucu tarafındaki json.txt dosyasında bulunan JSON verisi alınıyor ve bundan sonra eval komutu ile bir JavaScript objesi haline dönüştürülüyor. Böylece verileri içinde gezmek ve istediğimiz veriyi çekmek çok daha kolay bir hal alıyor. Eğer daha önce yazmış olduğum xml örneğiyle kıyaslarsak:

 

[JSON]

json.futbolcudata.futbolcular.length

json.futbolcudata.futbolcular[x].adi

json.futbolcudata.futbolcular[x].soyadi

 

[XML]

var ogrenciler = GelenXML.getElementsByTagName(“Futbolcular”);

futbolcular.length;

futbolcular[x].childNodes(0).text;

futbolcular[x].childNodes(1).text;

 

Farkı görüyorsunuz.

 

Verileri XML’den JSON’a çevirmek için çok sayıda programı internetten bulabilirsiniz. Bu makaleden de göreceğiniz gibi JSON, XML’e göre yazımı daha zor olsa bile daha kısa, daha seri ve daha az yer kaplayarak çalışır dolayısıyla avantajları çok daha önemli ve fazladır.

 

Umarım işinize yarar bir makale olmuştur, bir sonraki makalemde JSON ile ASP.Net’e değineceğim. Sanırım bu biraz daha projelerimizde kullanabileceğimiz bir makale olacak. Tekrar görüşmek üzere.

 

 

 

Kaynaklar:

# ASP.net AJAX – Daron Yöndem

# www.json.org

2 kişi tarafından 4.5 olarak değerlendirildi

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

Etiketler: , , ,

Software | Web | Articles

Kullanıcı taraflı önbellek sorunları

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:42

Ajax ile sunucu tarafında birden fazla XMLHttpRequest işlemi yapıldığında, tarayıcımız bazı işlemlerin sürekli aynı adreste yapılmasından ötürü önbellekleme yapabilir. Böyle bir durumda örneğin bir haber sitesini düşünelim. Her gün hatta her saat güncellenen bir sitedir neticede haber siteleri. Ancak önbellekleme sorununu yaşıyorsak biz bu güncellemelerden haberdar olamayız. Haber sitesinin ilgili sayfasını her açtığımızda aynı haberlerle karşılaşırız.

 

 

Bu ve buna benzer önbellekleme sorunlarını çözmek için çeşitli yollar var. Bunlardan birincisi, veri isteğinde bulunduğumuz web adresinin sonuna sürekli değişen bir parametre atmak. Böylece adres her seferinde farklı gözükecektir ve kullanıcı tarafındaki (web browser) önbellekleme bizleri etkilemeyecektir.

 

Aşağıdaki kodları ajaxbellek.htm şeklinde kaydedip inceleyebilirsiniz. Bu scripti kullanarak web adresinin sonuna parametre ekleyebilir ve önbellekleme sorununu aşabilirsiniz.

// xmlhttp adında bir değişken tanımlıyoruz. Daha sonra;

//bu değişkeni msxml2.xmlhttp active x objesi olarak tanımlamaya çalışıyoruz

//eğer başarılı değilse hatayı try catch metoduyla yakalıyoruz

//başarılı değilse Microsoft.xmlhttp active x objesini belirtip değerini alıyoruz


<script type="text/javascript" language="javascript">

function XMLHTTPObjesi()

{

var XMLHTTP = new ActiveXObject("Msxm12.XMLHTTP");

}

catch (hata)

{

try

{

XMLHTTP = new ActievXObject("Microsoft.XMLHTTP");

}

catch (hata)

{

if (typeof XMLHttpRequest != "undefined")

{

XMLHTTP = new XMLHttpRequest();

}

}

}


return XMLHTTP;


}


//bu fonksiyon xmlhttp objesinin talebinin onaylanıp onaylanmadığını
//kontrol ediyor. Onaylanırsa adrese rastgele atamasını yapıyor

function Dinle()

 

{

if (Objem.readyState == 4 &&

Objem.status == 200)

{


alert(Objem.responseText);


}

}

 

var Objem = XMLHTTPObjesi()

Objem.open("GET", "metin.aspx?id=4&rastgele=" + Math.random());

Objem.onreadystatechange = Dinle;

Objem.send(null);


</script>

 

 

Diğer çözüme geçeyim. Bu çözüm tekniğinde karşı taraftan gelen veriyi çekerken, ne zaman önbellekten silinmesi gerektiğini belirterek yine önbellekleme sorunundan kurtulabiliriz. Geçmişteki bir zamanı, gelen veriye Header olarak atarsak, veri alındıktan sonra önbellek geçerlilik süresi geçeceği için, web browser tarafından önbelleklenmeyecektir.

 

Aşağıdaki kodları ajaxbellek2.htm olarak kaydederek inceleyelim:


// daha önce yaptığımzı gibi xmlhttp adında bir değişken tanımlıyoruz.
// Daha sonra;

// bu değişkeni msxml2.xmlhttp active x objesi olarak tanımlamaya çalışıyoruz

// eğer başarılı değilse hatayı try catch metoduyla yakalıyoruz

// başarılı değilse Microsoft.xmlhttp active x objesini belirtip değerini alıyoruz

<script type="text/javascript" language="javascript">


function XMLHTTPObjesi()

{

var XMLHTTP = null;

try

{

XMLHTTP = new ActiveXobject("Msxm12.XMLHTTP");

}

catch (hata)

{

try

{

XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");

}

catch (hata)

{

if (typeof XMLHttpRequest != "undefined")

{

XMLHTTP = new XMLHttpRequest();

}

}

}


return XMLHTTP;


// bu fonksiyonun diğer fonksiyondan farkları var
// readystate’in 4 yani talep onaylanması işleminden sonra
// objenin önbellekten silinmesi gereken tarihi belirtmemiz gerekiyor

function Dinle()

{

İf (Objem.readyState == 4 &&

Objem.status == 200)

{

alert(Objem.responseText);

}

}

 

var Objem = XMLHTTPObjesi()

Objem.open("GET", "metin.txt");

Objem.setrequestHeader("If-Modified-Since", "Sat, 3 Nov 1992 13:13:13 GMT");

Objem.onreadystatechange = Dinle;

Objem.send(null);


</script>

 

 

Yukarıdaki scriptleri projelerinize rahatlıkla entegre edebilirsiniz. Umarım önbellekleme sorununu bu şekilde giderebilirsiniz.

Kaynaklar:
# ASP.net AJAX – Daron Yöndem

# Ajax.Asp.Net

Bu yazıyı ilk değerlendiren siz olun

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

Etiketler: ,

Software | Web | Articles

VB.Net ile işletim sistemi bilgilerini almak

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 13:39
Makale aynı zamanda System.Management namespacei için güzel bir örnek oluşturacak. Kodlarımızda kullanacağımız WblObjectQuery işletim sistemi bilgilerini görmek için kullanılan bir System.Management nesnesi. Bu nesne yoluyla win32_OperatingSystem tablosuna bağlanıp işimize yarayacak bilgileri çekeceğiz.

 

Öncelikle aşağıdaki formu oluşturuyoruz. 2 textbox ve 2 buttondan oluşuyor. Textboxlarımızın birine işletim sistemimizin türü, diğerine ise işletim sistemimizin dili geliyor. Buttonların hiçbir özelliği yok. Sadece görsel amaçlı, textboxta ne yazıyorsa orada da yazmasını istiyoruz.

 

 

 

 

 

Şimdi kod bölümüne geçiyoruz. Öncelikle System.IO ve System.Management sınıflarını projemize import ediyoruz.

 

Imports System.IO

Imports System.Management

 

Daha sonra formumuzun load özelliğine kodlarımızı yazıyoruz. Kodların açıklamaları satır aralarında yer alacaktır. Böylece kodlarken neyi neden yazdığınızı da anlayabileceksiniz.

 

'makalenin basinda söyledigim gibi WqlObjectQuery'i kullanarak

' win32_OperatingSystem tablosuna bağlanıp verileri çekiyoruz

Dim objectQuery As New WqlObjectQuery("select * from win32_OperatingSystem")

Dim searcher As New ManagementObjectSearcher(objectQuery)

Dim share As ManagementObject

'a parametresi sistem dilinin değerini taşıyacak

Dim a As String

'os parametresi ise isletim sistemimizin türünü tutacak

Dim os As String

For Each share In searcher.Get()

'win32_OperatingSystem tablosundaki name alanını

'isimize yarayacak sekilde cekiyoruz

a = share("Name")

Dim split1 As String()

split1 = Split(a, "|")

os = split1(0)

'hem textbox2ye hemde button2ye isletim sistemimizin türünü yazdiriyoruz

TextBox2.Text = os

Button2.Text = os

Next share

'simdi ise isletim sistemimizin dilini ögrenecegiz

For Each share In searcher.Get()

'yine win32_OperatingSystem tablosunun

' Locale alanindaki veriyi okuyoruz

a = share("Locale")

'belirli global degiskenler var

'örnegin 0409 ingilizceyi temsil ediyoruz

'ben önemli dillerin kodlarini aldim

'siz daha cok ekleyebilir yada silebilirsiniz

If a = "0409" Then

TextBox1.Text = "English"

Button1.Text = "English"

ElseIf a = "0407" Then

TextBox1.Text = "German"

Button1.Text = "German"

ElseIf a = "040a" Then

TextBox1.Text = "Spanish"

Button1.Text = "Spanish"

ElseIf a = "040c" Then

TextBox1.Text = "French"

Button1.Text = "French"

ElseIf a = "0416" Then

TextBox1.Text = "PortBraz"

Button1.Text = "PortBraz"

ElseIf a = "0419" Then

TextBox1.Text = "Russian"

Button1.Text = "Russian"

ElseIf a = "0410" Then

TextBox1.Text = "Italian"

Button1.Text = "Italian"

ElseIf a = "0415" Then

TextBox1.Text = "Polish"

Button1.Text = "Polish"

'iste asil yakalamamiz gereken dil

'041f türkceyi temsil ediyor

ElseIf a = "041f" Then

TextBox1.Text = "Turkish"

Button1.Text = "Turkish"

End If

Next share

 

 

 

Projeyi çalıştırdığınızda aşağıdaki görüntüyü alacaksınız.
(İşletim sisteminizin Windows XP, dilinizin Türkçe olduğunu varsayıyorum.)

 

 

 

 

Böylelikle basit bir yolla nasıl işletim sistemi bilgilerini elde edebileceğinizi göstermiş oldum. Umarım bundan sonraki projelerinize bir katkısı olur.

 

Bu projenin kodlarında kullandığım Local ID’lerin listesine şuradan ulaşabilirsiniz:
http://www.microsoft.com/globaldev/reference/lcid-all.mspx

Kaynaklar:

- Microsoft
- Code Project

Bu yazıyı ilk değerlendiren siz olun

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

Etiketler:

Articles | Software | Windows



Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.
Sitedeki kod ve tasarım değişiklikleri ise Yağız Gönüler tarafından geliştirilmiştir.
2008 © www.yagizgonuler.com

Paylaş

Share/Save/Bookmark

Paslaş

Anket

Mesleğinizden arta kalan zamanınızı nelere harcıyorsunuz?







Sonuçlar

Son Yorumlar

Comment RSS

Calendar

<<  Mart 2010  >>
PaSaÇaPeCuCuPa
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

Yazıları geniş takvimde göster

Ne Dinliyorum?

Yonca Lodi - Emanet (6 saat önce)
Yonca Lodi - Emanet (6 saat önce)
Yonca Lodi - Emanet (6 saat önce)
Yonca Lodi - Emanet (6 saat önce)
Yonca Lodi - Emanet (6 saat önce)
Yonca Lodi - Emanet (6 saat önce)
Shpongle - Star Shpongled Banner (13 saat önce)
Shpongle - Dorset Perceprion (14 saat önce)
Kate Havnevik - Halo (14 saat önce)
Kate Havnevik - New Day (14 saat önce)

Ne Okuyorum?

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı