Silverlight, web tabanlı uygulamaların hazırlanabilmesi için Microsoft tarafından üretilen bir teknoloji platformudur. Silverlight ile ilgili daha detaylı bilgi buradan alınabilir. Web tabanlı File Upload (Dosya yükleme) ile herhangi bir bilgisayar üzerinden Web sunucusuna dosya yüklenebilir. Böylece yüklenen dosya İnternet üzerinden erişilebilir hale gelecektir.   Öncelikle Visual Studio 2010 açılarak New Project (Yeni Proje) seçilir. Gelen ekrandan Visual C# altındaki Silverlight sekmesi seçilir. Yanda beliren Silverlight Application (Silverlight Uygulaması) seçilir. Alltaki kısımda Name (İsim) karşısına bir isim verilerek OK (Tamam) düğmesine tıklanır. Gelen ekranda OK (Tamam) düğmesine tıklanır. Oluşturulan projenin "Solution Explorer" kısmından, proje_ismi.Web satırına sağ tıklanarak Properties (Özellikler) satırına tıklanır. Açılan pencereden Web sekmesi seçilerek, Servers (Sunucular) kısmındaki Specific Port (Özel Port) seçilerek 1336 yazılır. Burada belirli bir port numarası verilmesinin nedeni; Visual Studio’nun web servisini eklerken localhost (yerel sunucu) adresini kullanmasıdır. Tek bir port adresi vererek adresin değişmesini önleyip Web servisi projeye eklenir. Daha sonra araç çubuğundan Save(Kaydet) düğmesine tıklanarak Özellikler sayfası kapatılır.   Tekrar  Solution Explorer kısmından, proje_ismi.Web satırına sağ tıklanarak Add (Ekle) -> New Item (Yeni Nesne) seçilir. Gelen pencerede Web Service (Web Servisi) seçilerek Name (İsim) kısmı doldurulur. Oluşturulan Web sayfası için aşağıdaki kodlar yazılır. Dosyanın yükleneceği yer kod içinde bulunan Yükleme Dizini kısmına yazılmalıdır.  (Örnek:”C:\\”) using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.IO; namespace FileUpload.Web { [WebService(Namespace = http://tempuri.org/)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class uploadService : System.Web.Services.WebService { [WebMethod] public string UploadFiles(string strFileName, byte[] byFile, string strFileNo) { try { if (byFile.Length > 0) { string strFilePath = "C:\\" + strFileName; System.IO.FileStream fs = new FileStream(strFilePath, FileMode.Create, FileAccess.Write); fs.Write(byFile, 0, byFile.Length); fs.Close(); return strFileNo; } else { return ""; } } catch { return ""; } } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Solution Explorer bölümünden FileUpload satırına sağ tıklanarak Add (Ekle)-> New Item (Yeni Nesne) seçilir. Açılan pencerede Class (Sınıf) seçilerek, Name (İsim) kısmı doldurulur. OK (Tamam) a tıklanır. Oluşturulan sınıfın kodları aşağıdaki gibidir. using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.IO; namespace FileUpload { public class FilesClass { public FilesClass() { } string strStatus = ""; string strNo = ""; FileInfo strFileName = null; public string PropNumber { get { return strNo; } set { strNo = value; } } public FileInfo PropFileName { get { return strFileName; } set { strFileName = value; } } public string PropStatus { get { return strStatus; } set { strStatus = value; } } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Referans dosyasını projeye eklemeden önce Solution Explorer(Çözüm Gezgini) de Solution File Upload(Çözüm Dosyası Yükle) satırına sağ tıklanarak Build seçeneği tıklanır. uploadService.asmx dosyasını projeye eklemek için Çözüm Gezgini'nde FileUpload satırına sağ tıklanır. Add Service Referance (Servis Referansı Ekle)  seçilir. Gelen ekranda Discover (Keşfet) düğmesine tıklanır ve referans dosyası çıkarılır.   Daha sonra Go düğmesine tıklanarak referans eklenir. Alttaki Name (İsim) kısmı doldurulur. OK (Tamam)  denilerek ekran kapatılır. Çözüm Gezgini'nde MainPage.xaml açılır. XMAL sekmesindeki kodların Grid "tag"ları arasına aşağıdaki kodlar yazılır. Bu kodlarla Gözat ve Yükle adında iki düğme oluşturulacaktır. <Grid x:Name="LayoutRoot" Background="White" Width="400" Height="50"> <Button Content="Gözat" Height="20" Width="150" Click="Button_Click" Margin="10,0,10,10" VerticalAlignment="Bottom" d:LayoutOverrides="Width,Height" HorizontalAlignment="Left" Background="#FF2770AF"></Button> <Button Content="Yükle" Height="20" Width="150" Click="Button_Click_1" Margin="20,0,10,10" VerticalAlignment="Bottom" d:LayoutOverrides="Width, Height" HorizontalAlignment="Right" Background="#FF2770AF"></Button> </Grid> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Design (Tasarım) kısmında oluşan Gözat ve Yükle düğmelerinden Gözat düğmesine tıklanarak MainPage.xaml.cs dosyası açılır. Burda Gözat düğmesi için otomatik olarak event (olay) oluşturulmuştur. Oluşturulan olayın üst kısmına aşağıdaki kodlar yazılır. private int iFileCount = 0; private List<FilesClass> fl = new List<FilesClass>(); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Oluşturulan bu olayın içi aşağıdaki gibi doldurulur. private void Button_Click(object sender, RoutedEventArgs e) { OpenFileDialog op = new OpenFileDialog(); op.ShowDialog(); if (op.File != null && op.File.Name != "") { if (op.File.Length < 1048576) { FilesClass obj = new FilesClass(); obj.PropFileName = op.File; obj.PropNumber = iFileCount.ToString(); fl.Add(obj); iFileCount++; } else { MessageBox.Show("En büyük dosya boyutu 1 MB"); } } else { MessageBox.Show("Dosya seçiniz."); } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Tekrar MainPage.xaml sayfasına dönülerek Design (Tasarım) sekmesine tıklanır. “Yükle” düğmesine tıklanarak MainPage.xaml.cs dosyasında Yükle için olay oluşturulur. Yükle düğmesi için oluşturulan olayın içi aşağıdaki gibi doldurulur. private void Button_Click_1(object sender, RoutedEventArgs e) { if (fl.Count > 0) { for (int count = 0; count < fl.Count; count++) { uploadService.uploadServiceSoapClient x = new uploadService.uploadServiceSoapClient(); x.UploadFilesCompleted += new EventHandler<uploadService.UploadFilesCompletedEventArgs> (UploadFileComplted); FilesClass obj = (FilesClass)fl[count]; System.IO.FileStream str = obj.PropFileName.OpenRead(); byte[] by = new byte[str.Length]; str.Read(by, 0, by.Length); str.Close(); x.UploadFilesAsync(obj.PropFileName.Name, by, obj.PropNumber); } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Upload (Yükleme) işleminin başarılı biçimde bittiğini belirten mesaj kutusunu çıkaran kod için “Yükle” düğmesi için yazılan kodun altına aşağıdaki kod yazılır. private void UploadFileComplted(object sender, uploadService.UploadFilesCompletedEventArgs e) { if (e.Result != "") { MessageBox.Show("Dosya Yüklendi"); } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Dosyalar araç çubuğundaki SaveAll (Hepsini Kaydet) ile kayıt edilir ve yine araç çubuğundaki StartDebuging (İşlemeye Başla) simgesine tıklanarak yazılan proje çalıştırılır. Projenin son görüntüsü aşağıdaki gibidir. Dosya yüklemek için Gözat düğmesine tıklanarak yüklenecek dosya seçilir. Dosya seçildikten sonra Yükle düğmesine tıklanarak kodda belirtilen yere dosya yükleme işlemi gerçekleştirilmiş olur.   Bu dokuman Erk Dursun tarafından hazırlanmıştır. Alıntı Tags: , , , , | Categories: .NET | C# | ASP.NET | Silverlight