vb xml ve json web servis
Merhaba
Bugün Vb ile XML ve JSON web servis hazırlamaya bakacağız. Bir web servis hazırlayıp bu servis ile bir takım içindeki çalışanların id, adı, maaşı ve pozisyonu bilgilerini hem xml hem de json olarak nasıl alabilceğimize bakacağız. Bu işlem için önce bir proje açalım. Visual Studio içinde “File > New > Project > Visual Basic > Windows > Web > ASP.NET Web Application” seçiminden sonra ekrana gelen seçimlerden “Empty” seçimi ile projemizi oluşturalım. Proje oluştuktan sonra proje üzerinde sağ tık ile “Add > Web Service(ASMX)” seçimi ile servisimizi ekleyelim. Artık proje için herşey hazır olduğuna göre şimdi servis içinde kullanacağımız class larımızı hazırlayalım. İlk olarak takım üyelerinin bilgilerinin oldugu “Member” classını ve sonrasında da “Team” classını oluşturualım.
[Member.vb]
Public Class Member Private m_Id As Integer Public Property Id() As Integer Get Return m_Id End Get Set m_Id = Value End Set End Property Private m_Name As String Public Property Name() As String Get Return m_Name End Get Set m_Name = Value End Set End Property Private m_Salary As Integer Public Property Salary() As Integer Get Return m_Salary End Get Set m_Salary = Value End Set End Property Private m_Position As String Public Property Position() As String Get Return m_Position End Get Set m_Position = Value End Set End Property End Class
[Team.vb]
Public Class Team Public Function GetTeamMembers() As Member() Dim teamMembers As Member() = New Member() { New Member() With {.Id = 1, .Name = "Samet", .Salary = 10000, .Position = "Software Specialist"}, New Member() With {.Id = 2, .Name = "Kubilay", .Salary = 10000, .Position = "Software Specialist"}, New Member() With {.Id = 3, .Name = "Erkan", .Salary = 10000, .Position = "Software Specialist"}} Return teamMembers End Function End Class
İşlem yapacağımız classlarımız artık hazır şimdi bu classları kullanacağımız servisimizin içeriğini hazırlayalım. Servisimizin içinde iki adet metodumuz olacak, birisi XML olarak diğeride aynı veriyi JSON olarak bize verecek. Metodlarımız GetTeamFromXML ve GetTeamFromJSON olacak.
[JSONandXML.asmx.vb]
Imports System.ComponentModel Imports System.Web.Script.Serialization Imports System.Web.Script.Services Imports System.Web.Services ' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. ' <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://sametcelikbicak.com/")> <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <ToolboxItem(False)> _ Public Class JSONandXML Inherits System.Web.Services.WebService <WebMethod> Public Function GetTeamFromXML() As Member() Dim team As New Team() Return team.GetTeamMembers() End Function <WebMethod> <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> Public Function GetTeamFromJSON() As String Dim team As New Team() Return New JavaScriptSerializer().Serialize(team.GetTeamMembers()) End Function End Class
Artık herşey kullanıma hazır şimdi projeyi çalıştırıp servisin çalışmasını ve dönen değerlere bakalım. Servis çalıştığında aşağıdaki gibi görünecektir.
İlk olarak alıştığımız gibi XML metodunu çağırdık ve gelen sonuç aşağıdaki gibidir.
[GetTeamFromXML]
<?xml version="1.0" encoding="UTF-8"?> <ArrayOfMember xmlns="http://sametcelikbicak.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Member> <Id>1</Id> <Name>Samet</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> <Member> <Id>2</Id> <Name>Kubilay</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> <Member> <Id>3</Id> <Name>Erkan</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> </ArrayOfMember>
Şimdide aynı verilere sahip sonuçları bize veren JSON metodunu çağıralım ve sonuçlarına bakalım.
[GetTeamFromJSON]
<?xml version="1.0" encoding="UTF-8"?> <string xmlns="http://sametcelikbicak.com/">[{"Id":1,"Name":"Samet","Salary":10000,"Position":"Software Specialist"},{"Id":2,"Name":"Kubilay","Salary":10000,"Position":"Software Specialist"},{"Id":3,"Name":"Erkan","Salary":10000,"Position":"Software Specialist"}]</string>
Artık bir web servis ile hem xml hemde json olarak verileri alabiliyoruz.
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
vb universal app hello world
Merhaba
Bugün Universal App olarak bir Hello World uygulamamızı hazırlayacağız. Bildiğiniz gibi universal app her platformda çalışıyor(desktop,web, mobile ve Microsoft’un desteği olan her yerde xbox gibi). Bizde bugün sabit bir uygulama hazırlayalım. Öncelikli olarak projemizi oluşturalım ve bunun için Visual Studio da sırası ile File > New > Project > Installed > Templates > Visual Basic > Windows > Universal adımlarını takip edip, gelen ekrandan da Blank App(Universal Windows) seçeneği ile projemizi oluşturuyoruz. Oluşturduğumuz projenin örnek kodları aşağıdaki gibi olacaktır.
Uygulamamızın dizaynını yaptığımız MainPage.xaml içeriği.
[MainPage.xaml]
<Page x:Class="UniversalAppVb.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:UniversalAppVb" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <TextBox x:Name="txtHelloWorld" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="Hello World" VerticalAlignment="Top" Height="178" Width="340" FontSize="30" TextAlignment="Center"/> <Button x:Name="btnHelloWorld" Content="Hello World" HorizontalAlignment="Left" Margin="10,355,0,0" VerticalAlignment="Top" Height="51" Width="340" FontSize="30" Click="btnHelloWorld_Click"/> </Grid> </Page>
Dizayn ettiğimiz uygulamamızın kontrolleriniz yazdığımız MainPage.xaml.vb içeriği
[MainPage.xaml.vb]
' The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 Imports Windows.UI.Popups ''' <summary> ''' An empty page that can be used on its own or navigated to within a Frame. ''' </summary> Public NotInheritable Class MainPage Inherits Page Private Async Sub btnHelloWorld_Click(sender As Object, e As RoutedEventArgs) txtHelloWorld.Text = "Windows Universal App, Hello World." Dim message As MessageDialog = New MessageDialog("Windows Universal App with Vb, Like it ? ") message.Title = "Hello World" message.Commands.Add(New UICommand("Yes")) message.Commands.Add(New UICommand("No")) Dim result = Await message.ShowAsync() If result.Label = "Yes" Then Dim msg As MessageDialog = New MessageDialog("Thank you very much :) ") msg.Title = "Thanks" msg.Commands.Add(New UICommand("Ok")) Await msg.ShowAsync() End If End Sub End Class
Burada basit olarak bir ekran hazırladık ve içinde butona bastığımızda değişen bir mesaj ekleyip sonrasında ise kullanıcıya mesaj verip işlemi kontrol etmesini sağladık. Uygulama çalıştığında aşağıdaki gibi ekran görüntülerindeki gibi olacaktır.
Burada dikkat etmemiz gereken bir konu var. Eğer işletim sisteminizde geliştirici seçenekleri aktif değil ise uygulamayı dizayn ederken uyarı alırız. Bu özelliği aktif etmek için Başlat > Ayarlar > Güncelleştirme ve güvenlik > Geliştiriciler için sekmesi altından Geliştirici modu seçeneğini aktif etmeliyiz. Bu ayarlamayı yaptıktan sonra ise uygulamamızı dizayn edip çalıştırabiliriz.
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
vb resource dosyası okuma
Merhaba
Yazdığımız programlarda birden fazla dil desteği sunacağımız zaman çeşitli yöntemler ile bunu yaparız. Bazen database üzerinde bir tablo içinde bazen de bir Resource dosyasında. Özel bazı durumlarda database üzerinde çoklu dil desteğine ait bilgileri tutsak bile genel olarak bu işlem Resource dosyları ile yapılmaktadır. Şimdi sizlerle birlikte basit bir console uygulaması hazırlayalım ve bu uygulama ile “Hello World” mesajını farklı diller ile yazdıralım. Bunun için projemize yeni bir item olarak Resource file ekliyoruz. Eklediğimiz dosy bizim default culture bilgisine ait olmaktadır. Diğer dillere ait bilgileri tutmak için ise tek tek resource dosyası ekleriz ve bunların isimlerinin sonuna “.” ile o dilin culture bilgisini yazarız. Bizim örneğimizde üç adet dile ait bilgileri kullanacağız. Türkçe, İngilizce ve Fransızca. Siz bunları istediğiniz gibi değiştirip çoğaltabilirsiniz. İlk eklediğimiz Resource file ismini Türkçe dili için kullanacağımızdan adını “Resource.resx” olarak belirtiyoruz, daha sonra ise İngilizce için “Resource.en-US.resx” ve Fransızca içinse “Resource.fr-FR.resx” dosyalarını oluşturuyoruz. Dosyalarımızu oluşturduğumuzda içindeki veriler aşağıdaki gibi olacaktır.
[Resource.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Merhaba Dünya</value> </data>
[Resource.en-US.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Hello World</value> </data>
[Resource.fr-FR.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Bonjour le monde</value> </data>
Şimdi bu resource dosyalarındaki bilgileri okumak için bir class hazırlayalım. Alttaki kod içindeki “ResourceManager” ilk parametresindeki değer Resource dosyasının yerini gösterir. Bizim projemizde Resource dosyası proje içindeki Resources klasörü altında olduğu için ilk parametre değeri namespace.klasöradi.resource adi şeklindedir.
[Read.vb]
Imports System.Globalization Imports System.Reflection Imports System.Resources Public NotInheritable Class Read Public Shared Function FromResource(key As String, culture As CultureInfo) Dim rm As ResourceManager = New ResourceManager("ResourcesVb.Resource", Assembly.GetExecutingAssembly()) Return rm.GetString(key, culture) End Function End Class
Okuma yapacağımız class hazır olduğuna göre, program içerisinde her bir dil için culture bilgisine ihtiyacımız olduğundan bu bilgileri tutabileceğimiz bir class hazırlayalım.
[Culture.vb]
Public NotInheritable Class Culture Public Shared Function trTR() As String Return "tr-TR" End Function Public Shared Function enUS() As String Return "en-US" End Function Public Shared Function frFR() As String Return "fr-FR" End Function End Class
Şimdide çalışacak olan programımızı yazalım.
[Program.vb]
Imports System.Globalization Module Program Sub Main() Dim cultureTR As CultureInfo = New CultureInfo(Culture.trTR()) Dim cultureUS As CultureInfo = New CultureInfo(Culture.enUS()) Dim cultureFR As CultureInfo = New CultureInfo(Culture.frFR()) Console.WriteLine("Read resources from Resource.resx with Culture") Console.WriteLine("HelloWorld with " + cultureTR.Name + " : " + Read.FromResource("HelloWorld", cultureTR)) Console.WriteLine("HelloWorld with " + cultureUS.Name + " : " + Read.FromResource("HelloWorld", cultureUS)) Console.WriteLine("HelloWorld with " + cultureFR.Name + " : " + Read.FromResource("HelloWorld", cultureFR)) Console.ReadKey() End Sub End Module
Artık herşey hazır ve programı çalıştırdığımızda ise çıktı olarak aşağıdaki gibi bir sonuç görürüz.
Read resources from Resource.resx with Culture HelloWorld with tr-TR : Merhaba Dünya HelloWorld with en-US : Hello World HelloWorld with fr-FR : Bonjour le monde
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
vb ile config dosyası okuma
Merhaba
Çalıştığımız projelerde veya yazdığımız kodlarda çoğu zaman bir config dosyasına ihtiyaç duyarız. Bu gibi durumlarda config içerisine yazdığımız verileri okumakda önemli oluyor. Bunun için çok basit olarak config doyasından veri okumayı hazırlayalım. İlk olarak projemizi oluşturalım ve projemizse referans olarak System.Configuration dll ini ekleyelim. Daha sonra okuma işlemini yaptıracağımız bir class ekleyelim ve bu örnek için class adı Read olsun. Class içinde de okumayı yapacak olan metodu da hazırlayım ve adına FromConfig diyelim. Bu işlemlerden sonra projemizde var olan App.config dosyasının içerisine de okumaya yapacağımız alanları appSettings tagı arasına ekleyelim. Burada önemli olan ise appSettings içerisine yazılacak verinin key ve value değlerinin olması. key bilgisini program içerisinden ulaşmak için kullanacağız ve value bilgisnde ise istediğimiz değeri tutacağız. Şimdi sırası ile program içeriğimize bakalım.
aşağıdaki sistemde kullandığımız App.config içerisi mevcut.
[App.config]
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="HelloWorld" value="'Hello World' This message from App.config"/> <add key="KeyOne" value="Value One"/> <add key="KeyTwo" value="Value Two"/> </appSettings> </configuration>
App.config içerisinden veriyi okumak için hazırladığımız Read class ı ve onun içinde bulunan FromConfig metodu
[Read.vb]
Imports System.Configuration Public NotInheritable Class Read Public Shared Function FromConfig(ByVal key As String) As String Return ConfigurationManager.AppSettings.Get(key) End Function End Class
Son olarak ise çalışan program kodumuz, Read class ı içindeki FromConfig metodu ile App.config içinden belirtiğimiz key e ait değeri bize getiriyor.
[Program.vb]
Module Program Sub Main() Console.WriteLine(Read.FromConfig("HelloWorld")) Console.WriteLine(Read.FromConfig("KeyOne")) Console.WriteLine(Read.FromConfig("KeyTwo")) Console.ReadKey() End Sub End Module
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
vb dosya veri yazma işlemi
Merhaba
Daha önce yazdığım c# dosya veri yazma işlemi yazımda olduğu gibi aynı işlemleri vb.net ile de yapabiliriz. Bir önceki yazımda olan kodların bire bir vb.net için yazılmış hali aşağıdaki gibidir.
Öncelikle veri yazma işlemini yapacak olan sınıfımızı oluşturalım.
Imports System.IO Public Class File Public Sub Write(ByVal filePath As String, ByVal fileName As String, ByVal strLog As String, Optional isAppend As Boolean = True) Try Dim logWriter As StreamWriter = New StreamWriter(filePath + fileName, isAppend) logWriter.WriteLine(strLog) logWriter.Close() logWriter.Dispose() Catch ex As Exception Throw ex End Try End Sub End Class
Artık elimizde yazma işlemini yapacağımız sınıfımız olduğuna göre şimdi bu sınıfı kullanıp basitce bir veri yazma işlemi yapalım.
Imports System Imports System.Text Module Program Sub Main() Dim file As File = New File() Dim i(0) As Byte Dim sbLog As StringBuilder = New StringBuilder() Dim sbExLog As StringBuilder = New StringBuilder() Try sbLog.AppendLine(DateTime.Now.ToString()) sbLog.AppendLine("First line") sbLog.AppendLine("Second line") sbLog.AppendLine("Message") file.Write("C:\\LogVb\\", "Log.txt", sbLog.ToString()) 'programın hata alması ve bu hata mesajını yazmak için eklendi. i(999999) = 1 Catch ex As Exception sbExLog.AppendLine(DateTime.Now.ToString()) sbExLog.AppendLine(ex.Message) sbExLog.AppendLine(ex.StackTrace) file.Write("C:\\LogVb\\", "ExLog.txt", sbExLog.ToString()) End Try End Sub End Module
Yukarıdaki kodlarda görüldüğü gibi file.Write(“C:\\LogVb\\”, “Log.txt”, sbLog.ToString()) satırında istediğimiz mesajı belirtiğimiz dosya yolu ve ismi ile kayıt edebiliriz. Buna ilave olarak file.Write(“C:\\LogVb\\”, “ExLog.txt”, sbExLog.ToString()) satırında ise bir hata durmunda yine aynı yöntem ise bir başka dosyaya ya da istenirse aynı dosya içine hata bilgileri de yazdırılabilinir. Basitçe yaptığmız bu işlem ihtiyaçlara göre değiştirilip daha da kapsamlı olarak kullanılabilinir.
Kodlar çalıştırıldığında oluşan örnek dosyaların içeriği aşağıdaki gibidir.
[Log.txt]
26.03.2016 14:05:37 First line Second line Message
[ExLog.txt]
26.03.2016 14:05:37 Dizin, dizi sınırlarının dışındaydı. konum: ConsoleLogVb.Program.Main() D:\TfsDevelop\Main\ConsoleLogVb\ConsoleLogVb\Program.vb içinde: satır 21
Kolay gelsin.