Jump to content

Wcf Rest Starter Kit Preview


wmismail

Recommended Posts

WCF Rest Starter Kit Preview 2

Aslında sizlere anlatacağım işlevsellik Rest based servislerin kullanımı için hazırlanmış. İsterseniz bu çerçevede aşağıdan download edebileceğiniz paketi bilgisayarınıa yükleyip diğer özellikleri de inceleyebilirsiniz. Fakat bizim bu yazımızda odaklanacağımız nokta C# ile XML sorgulama ve hızlıca XML yaratma konuları olacak.

http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24644

Özünde bugün rahatlıkla C# ile XML sorgulayabilir veya yaratabilirsiniz fakat elinizde hazır bir XML kodu olduğunu düşünürsek bu kodu yaratacak veya okuyacak C# kodunu yazarken sürekli hedef XML'in yapısını incelemek zorunda kalıyoruz. VB'de Inline XML bu sorunu tamamen çözse de C# içerisinde ancak WCF Rest Starter Kit ile beraber gelen araçları kullanarak işimizi kolaylaştırabiliriyoruz.

03052009_1.png

WCF Rest Starter Kit ile beraber "Past XML as Types"

Elimizde gelen hazır bir formatta XML yaratalım!

Elimize aşağıdaki gibi hazır bir formatta XML geldiğini varsayalım. Bir şekilde bu XML ile aynı yapıda elimizde yer alan farklı bir veriden XML oluşturmak durumunda kalırsak tek tek her tagı yaratan XElement, XAttribute vs nesnelerini yaratmamız gerekecektir. Oysa eğer bilgisayarınızda WCF Rest Starter Kit yükledi iseniz işiniz daha kolay.

[/b]

[CODE]<?xml version="1.0" encoding="utf-8" ?>

<DenemeVeri>

<Urunler>

<Urun No="145">

<Adi>Örnek Ürün</Adi>

<Kodu>df234sd</Kodu>

</Urun>

<Urun No="146">

<Adi>Örnek Ürün</Adi>

<Kodu>df234sd</Kodu>

</Urun>

</Urunler>

</DenemeVeri>[/CODE]

WCF Rest Starter Kit kurulumunu tamamladıktan sonra doğrudan Visual Studio'nun Edit menüsüne giderseniz "[b]Past XML as Types[/b]" diye bir seçenek göreceksiniz. Yukarıdaki örnek XML'i kopyaladıktan sonra Visual Studio içerisinde herhangi bir projeye yeni bir CS dosyası ekleyip içine kopyaladığımız XML'i "Past XML as Types" diyerek yapıştıralım.

[b][C#][/b]

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[system.CodeDom.Compiler.[color= #2b91af]GeneratedCodeAttribute[/color]([color= #a31515]"System.Xml"[/color], [color= #a31515]"2.0.50727.3521"[/color])]

[system.Diagnostics.[color= #2b91af]DebuggerStepThroughAttribute[/color]()]

[system.Xml.Serialization.[color= #2b91af]XmlTypeAttribute[/color](AnonymousType = [color= blue]true[/color])]

[system.Xml.Serialization.[color= #2b91af]XmlRootAttribute[/color](Namespace = [color= #a31515]""[/color], IsNullable = [color= blue]false[/color])]

[color= blue]public[/color] [color= blue]partial[/color] [color= blue]class[/color] [color= #2b91af]DenemeVeri[/color]

{

[color= blue]private[/color] [color= #2b91af]DenemeVeriUrunler[/color] urunlerField;

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[color= blue]public[/color] [color= #2b91af]DenemeVeriUrunler[/color] Urunler

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].urunlerField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].urunlerField = [color= blue]value[/color];

}

}

}

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[system.CodeDom.Compiler.[color= #2b91af]GeneratedCodeAttribute[/color]([color= #a31515]"System.Xml"[/color], [color= #a31515]"2.0.50727.3521"[/color])]

[system.Diagnostics.[color= #2b91af]DebuggerStepThroughAttribute[/color]()]

[system.Xml.Serialization.[color= #2b91af]XmlTypeAttribute[/color](AnonymousType = [color= blue]true[/color])]

[color= blue]public[/color] [color= blue]partial[/color] [color= blue]class[/color] [color= #2b91af]DenemeVeriUrunler[/color]

{

[color= blue]private[/color] [color= #2b91af]DenemeVeriUrunlerUrun[/color] urunField;

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[color= blue]public[/color] [color= #2b91af]DenemeVeriUrunlerUrun[/color] Urun

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].urunField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].urunField = [color= blue]value[/color];

}

}

}

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[system.CodeDom.Compiler.[color= #2b91af]GeneratedCodeAttribute[/color]([color= #a31515]"System.Xml"[/color], [color= #a31515]"2.0.50727.3521"[/color])]

[system.Diagnostics.[color= #2b91af]DebuggerStepThroughAttribute[/color]()]

[system.Xml.Serialization.[color= #2b91af]XmlTypeAttribute[/color](AnonymousType = [color= blue]true[/color])]

[color= blue]public[/color] [color= blue]partial[/color] [color= blue]class[/color] [color= #2b91af]DenemeVeriUrunlerUrun[/color]

{

[color= blue]private[/color] [color= blue]string[/color] adiField;

[color= blue]private[/color] [color= blue]string[/color] koduField;

[color= blue]private[/color] [color= #2b91af]DenemeVeriUrunlerUrunFiyatlar[/color] fiyatlarField;

[color= blue]private[/color] [color= blue]byte[/color] noField;

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[color= blue]public[/color] [color= blue]string[/color] Adi

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].adiField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].adiField = [color= blue]value[/color];

}

}

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[color= blue]public[/color] [color= blue]string[/color] Kodu

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].koduField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].koduField = [color= blue]value[/color];

}

}

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[color= blue]public[/color] [color= #2b91af]DenemeVeriUrunlerUrunFiyatlar[/color] Fiyatlar

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].fiyatlarField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].fiyatlarField = [color= blue]value[/color];

}

}

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[system.Xml.Serialization.[color= #2b91af]XmlAttributeAttribute[/color]()]

[color= blue]public[/color] [color= blue]byte[/color] No

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].noField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].noField = [color= blue]value[/color];

}

}

}

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[system.CodeDom.Compiler.[color= #2b91af]GeneratedCodeAttribute[/color]([color= #a31515]"System.Xml"[/color], [color= #a31515]"2.0.50727.3521"[/color])]

[system.Diagnostics.[color= #2b91af]DebuggerStepThroughAttribute[/color]()]

[system.Xml.Serialization.[color= #2b91af]XmlTypeAttribute[/color](AnonymousType = [color= blue]true[/color])]

[color= blue]public[/color] [color= blue]partial[/color] [color= blue]class[/color] [color= #2b91af]DenemeVeriUrunlerUrunFiyatlar[/color]

{

[color= blue]private[/color] [color= blue]byte[/color][] fiyatField;

[color= blue]private[/color] [color= blue]byte[/color] seviyeField;

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[system.Xml.Serialization.[color= #2b91af]XmlElementAttribute[/color]([color= #a31515]"Fiyat"[/color])]

[color= blue]public[/color] [color= blue]byte[/color][] Fiyat

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].fiyatField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].fiyatField = [color= blue]value[/color];

}

}

[color= gray]///[/color][color= green] [/color][color= gray][/color]

[system.Xml.Serialization.[color= #2b91af]XmlAttributeAttribute[/color]()]

[color= blue]public[/color] [color= blue]byte[/color] Seviye

{

[color= blue]get[/color]

{

[color= blue]return[/color] [color= blue]this[/color].seviyeField;

}

[color= blue]set[/color]

{

[color= blue]this[/color].seviyeField = [color= blue]value[/color];

}

}

}

Yukarıda da gördüğünüz üzere biraz önce yapıştırdığımız tüm XML kodu bir anda Entity'ler olarak karşımıza çıkıyor. Böylece artık bu Entity'leri kullanarak aynı formatta bir XML yaratabiliriz. Gelin bir deneyelim;

[b][C#][/b]

[color= #2b91af]DenemeVeri[/color] Ornek = [color= blue]new[/color] [color= #2b91af]DenemeVeri[/color]();

[color= #2b91af]DenemeVeriUrun[/color][] Urunler = [color= blue]new[/color] [color= #2b91af]DenemeVeriUrun[/color][1];

[color= #2b91af]DenemeVeriUrun[/color] YeniUrun = [color= blue]new[/color] [color= #2b91af]DenemeVeriUrun[/color]();

YeniUrun.Adi = [color= #a31515]"Örnek Ürün"[/color];

YeniUrun.Kodu = [color= #a31515]"123"[/color];

YeniUrun.No = 123;

Urunler[0] = YeniUrun;

Ornek.Urunler = Urunler;

[color= #2b91af]XmlSerializer[/color] MySerializer = [color= blue]new[/color] [color= #2b91af]XmlSerializer[/color]([color= blue]typeof[/color]([color= #2b91af]DenemeVeri[/color]));

[color= #2b91af]TextWriter[/color] TW = [color= blue]new[/color] [color= #2b91af]StringWriter[/color]();

MySerializer.Serialize(TW, Ornek);

Response.Write(TW.ToString());

Yukarıdaki kod içerisinde aslında XML taglarından türetmiş olduğumuz Entity'leri kullanarak yeni bir XML kaynağı yaratabiliyoruz. Tüm bunları yaparken nesneler tanımlı olduğu için hem nested itemların yapılarını kontrol etmemize gerek kalmıyor hem de Intellisens bize yardımcı oluyor :rolleyes:

[b]Peki ya XML sorgularken?[/b]

Elimizde tanımı hazır bir XML dosyasından Entity'leri yarattığımıza göre aslında yine bildiğimiz bir XML'i okuyarak bu Entity'lere de çevirebiliyor olmamız gerek. Böylece XML sorgularken karşılaştığımız ve karşımızdaki XML'in yabancı bir yapıya sahip olmasından yola çıkan zorluklardan yine kurtulabiliriz.

[b][C#][/b]

[color= #2b91af]XDocument[/color] Dok = [color= #2b91af]XDocument[/color].Load(Server.MapPath([color= #a31515]"XMLFile.xml"[/color]));

[color= #2b91af]XmlSerializer[/color] MySerializer = [color= blue]new[/color] [color= #2b91af]XmlSerializer[/color]([color= blue]typeof[/color]([color= #2b91af]DenemeVeri[/color]));

[color= #2b91af]TextReader[/color] TW = [color= blue]new[/color] [color= #2b91af]StringReader[/color](Dok.ToString());

[color= #2b91af]DenemeVeri[/color] Denek = MySerializer.Deserialize(TW) [color= blue]as[/color] [color= #2b91af]DenemeVeri[/color] ;

Response.Write(Denek.Urunler.Count());

Yukarıda gördüğünüz kod içerisinde ilk olarak makalemizin başındaki XML'in kayıtlı olduğu bir XML dosyasını okutuyoruz. Söz konusu XML dosyasının içeriğinden yarattığımız Entity'ler projemizin içerisinde yine hazır bulunuyorlar. Bu noktadan sonra tek yapmamız gereken eldeki XML'i [b]DeSerialize[/b] ederek yine elde tanımlı [b]Entity'lere[/b] çevirmek. Çeviri işlemini de tamamladıktan sonra artık rahat rahat istediğimiz veriye Intellisense'in de yardımı ile ulaşabiliriz. Hedef XML'in yapısı hiç bilmesek de sorgulama yapmak Entity'ler sayesinde kolaylaşıyor.

[b][C#][/b]

Response.Write(([color= blue]from[/color] inc [color= blue]in[/color] Denek.Urunler [color= blue]where[/color] inc.No==145 [color= blue]select[/color] inc.Adi).Single());

Yukarıda gördüğünüz sorgu aslında biraz önce [b]DeSerialize[/b] ettiğimiz XML'i sorguluyor. Yine Intellisense ve LINQ yardımı ile sorgunun kodunu yazmak da çok kolaylaşıyor.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...