.NET Tutorials, Forums, Interview Questions And Answers
Welcome :Guest
Sign In
Win Surprise Gifts!!!

Top 5 Contributors of the Month
Gaurav Pal

Home >> Articles >> Silverlight >> Post New Resource Bookmark and Share   

 Subscribe to Articles

File Upload from Silverlight using WCF In Server Location

Posted By:Dhananjay Kumar       Posted Date: February 04, 2010    Points: 25    Category: Silverlight    URL: http://www.dotnetspark.com  

File Upload from Silverlight using WCF In Server Location. This article will explain, How to upload a file from SilverLight client to server location using WCF.


This article will explain, How to upload a file from SilverLight client to server location using WCF.

To achieve above task, follow the below steps. I am assuming here, that Reader has a basic concept of
  1. WCF
  2. Silver Light
  3. Cross Domain Issue
  4. Hosting of WCF Service
For details on these topics, you could find astronomical number of articles on the Web. To Read articles written by me on above topic please Click Here

Pictorial representation of output




Follow the Steps below

Step 1:

Create and Host the WCF Service.

a. Create the Contract. This got only one method, which is taking as input a file to upload.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
 namespace FileUploadService  
  public interface IService1  
  void SaveFile(UploadFile UploadFile);

b. Create the Data Contract. This is going to contain the information about the uploaded file. You could either put this UploadFile Data Contract in same file with contract or in separate file.

  public class UploadFile
  public string FileName; 
  public byte[] File;

c. Implement the Service. We are simply creating instance of FileStream in create mode and writing the stream into that.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Configuration;
using System.Web;
using System.ServiceModel.Activation;
using System.IO; 
namespace FileUploadService
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
  public class Service1 : IService1
  public void SaveFile(UploadFile UploadFile)
  FileStream FileStream = new FileStream("E:\\FileUpload\\" + UploadFile.FileName, FileMode.Create);
  FileStream.Write(UploadFile.File, 0, UploadFile.File.Length); 

d. Modify the Web.Config. Binding to be used is basicHttpBinding. I am setting the Buffer size and max Message received size also here.


Host the service in IIS. Make sure you have put the access policy file at root directory of the server. If you have not done this, you will be getting cross domain error while accessing the service in Silver Light client. After hosting in IIS, browse the service to make sure, service is running and hosted properly.

By competing of Step 1, we have successfully created and hosted our service in IIS.

Step 2:

Create the Silver Light Client and consume the service

In belnd , I have just created one button and one text box. On clicking of the Button File Open Dialog Box will get open and user will select the file to uplaod. Text box is used to display the message thet whether file is successfully saved at server or not. If you don't want to use Blend no issue. Just create a simple Silver Light application and add one button and text box on that.


Generated XAML code is as below.


Step 3:

Add the Service Reference
To add the Service Reference in the Silver Light, right click on the Service and add Service reference.

Step 4:

Write the code behind


using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.IO;
using FileUpload.ServiceReference1;
using System.Windows.Browser; 
namespace FileUpload
  public partial class MainPage : UserControl
  public OpenFileDialog fileDialog = null;
  Service1Client proxy = null; 
  public MainPage()
  proxy = new Service1Client();
  private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
  fileDialog = new OpenFileDialog();
  fileDialog.Multiselect = false;
  fileDialog.Filter = "All Files|*.*";
  bool? retval = fileDialog.ShowDialog();
  if (retval != null && retval == true)
  Stream strm = fileDialog.File.OpenRead();
  byte[] Buffer = new byte[strm.Length];
  strm.Read(Buffer, 0, (int)strm.Length);
  UploadFile file = new UploadFile();
  file.FileName = fileDialog.File.Name;
  file.File = Buffer; 
  proxy.SaveFileCompleted += new
  txtFileDisplayName.Text = " No File Selected ";
  void proxy_SaveFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
  if (e.Error == null)
  txtFileDisplayName.Text = fileDialog.File.Name + "Successfully Saved at ServerLocation"; 

Explanation of code
    1. We are here reading the file and converting content of the file in form of stream.

    2. We are creating instance of FileDialog to show file dialog to user and then select the file to be saved. Multi select is set to false. It means user can not select more than one file at one time.

    3. We are calling the Save File operation of service asynchronously on the proxy instance. Proxy is instance of the Service class.

    4. We are creating instance of Data Contract and assigning property values by reading the file name through FileOpenDialog and stream by converted stream


Step 4:

Press F5 to run the application

How to use Attached ZIP File

  1. Download and unzip somewhere.
  2. Host the FileUploadService (This is WCF service folder) in IIS.
  3. Open FileUpload folder. This is Siliver Light client. Go to reference and remove the attached service reference and add new service reference.
  4. On your local pc create a folder called FileUpload at E drive or modify your desired location in the service where you want to save the file.

Thank you very much for reading this article. I hope, it would have helped you out.

Happy Coding.

 Subscribe to Articles


Further Readings:

Author: amol         Company URL: http://www.dotnetspark.com
Posted Date: November 15, 2010

i have created as u mnetion in above but i am not able to send file size more than 16 kb why it is so reply me as soon as possible

Post Comment

You must Sign In To post reply
Find More Articles on C#, ASP.Net, Vb.Net, SQL Server and more Here

Hall of Fame    Twitter   Terms of Service    Privacy Policy    Contact Us    Archives   Tell A Friend