Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | Videos | Photos | Downloads | Blogs | E-Books | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Login Close
User Id:
Password:
 
Forgot Password
Forgot Username
Why Register
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
 Resources  
Close
 Our Network  
Close
Search :       Advanced Search »
Home » WCF » File Uplalod from Silver Light application to server location using WCF

File Uplalod from Silver Light application to server location using WCF

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

Author Rank:
Technologies: Silverlight,Visual C# .NET
Total downloads : 104
Total page views :  3102
Rating :
 3/5
This article has been rated :  1 times
   Print Read/Post comments Post a comment  Rate  
   Email to a friend  Bookmark  Similar Articles  Author's other articles  
Download Files:
FileUpload.zip
 
Become a Sponsor




Objective:

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

image1.gif

image2.gif

image3.gif

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.

IService1.svc

using
System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
 namespace FileUploadService      
{
        [ServiceContract]
    public interface IService1                    
    {

 

        [OperationContract]
        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.

[DataContract]
    public class UploadFile
    {
        [DataMember]
        public string FileName;

        [DataMember]
        public byte[] File;
    }

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

image4.gif

Service1.svc.cs

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);

            FileStream.Close();
            FileStream.Dispose();
        }

    }
}

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

<system.serviceModel>
 
    <
serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <bindings>
      <
basicHttpBinding>
        <
binding name="ServicesBinding" maxReceivedMessageSize="2000000" maxBufferSize="2000000">
          <readerQuotas maxArrayLength="2000000" maxStringContentLength="2000000"/>
        </binding>
      </
basicHttpBinding>
    </
bindings>
    <
services>
      <
service name="FileUploadService.Service1" behaviorConfiguration="FileUploadService.Service1Behavior">
        <!-- Service Endpoints -->
        <
endpoint address="" binding="basicHttpBinding" contract="FileUploadService.IService1">
          <!--
              Upon deployment, the following identity element should be removed or replaced to reflect the
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity
              automatically.
         
-->
          <
identity>
            <
dns value="localhost"/>
          </identity>
        </
endpoint>
        <
endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </
services>
    <
behaviors>
      <
serviceBehaviors>
        <
behavior name="FileUploadService.Service1Behavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <
serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <
serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </
serviceBehaviors>
    </
behaviors>
  </system.serviceModel>

e.
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.

For details of Cross domain issue read my article http://www.c-sharpcorner.com/UploadFile/dhananjaycoder/wcfandsilverlight04152009051036AM/wcfandsilverlight.aspx

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.

image5.gif

Generated XAML code is as below.

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="FileUpload.MainPage"
    Width="Auto" Height="Auto" mc:Ignorable="d">
    <Grid x:Name="LayoutRoot" Background="#FF241515" Margin="-0.05,0.044,-14.05,-15.956" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto" Width="420" Height="320">

    <Grid.RowDefinitions>
         <RowDefinition Height="0.48*"/>
         <RowDefinition Height="0.52*"/>
    </Grid.RowDefinitions>
    <Grid.RenderTransform>
         <TransformGroup>
             <ScaleTransform/>
             <SkewTransform/>
             <RotateTransform Angle="0.359"/>
             <TranslateTransform/>
         </TransformGroup>
    </Grid.RenderTransform>
    <Button Margin="10,10,10,10" Background="#FF1688E9" BorderThickness="2,2,2,2" FontSize="18" FontWeight="Bold" Content="Click To Upload the File to Server" Click="Button_Click"/>
    <TextBox x:Name="txtFileDisplayName" Margin="32.191,37.471,44.252,41.08" Grid.Row="1" Text="" TextWrapping="Wrap" Foreground="#FFA32929" BorderThickness="3,3,3,3" FontWeight="Bold" FontFamily="Arial Rounded MT Bold" FontSize="18"/>

    </Grid>
</
UserControl>

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

MainPage.Xaml.cs

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()
        {
            InitializeComponent();
            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);
                strm.Dispose();
                strm.Close();
                UploadFile file = new UploadFile();
                file.FileName = fileDialog.File.Name;
                file.File = Buffer;

                proxy.SaveFileAsync(file);
                proxy.SaveFileCompleted += new
EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(proxy_SaveFileCompleted);
 
            }
 
            else
            {
                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. image6.gif
     

  3. 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.

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

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

    image19.gif

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.


Login to add your contents and source code to this article
 [Top] Rate this article
 About the author
 
Dhananjay Kumar
I am Dhananjay Kumar. I passed computer science  & engineering from AEC Agra in year 2007. I born and brought up in Jamshedpur , Jharkhand.I am MCTS on WCF, MOSS Development , .Net Framework 2.0 Web Application so far. I read and write on WCF, SilverLight , SharePoint , ASP.Net MVC, ASP.Net 3.5 Extensions , .Net 4.0 , C# 3.0 , C# 4.0 etc etc. Currently , I am working for UST Global as Software Engineer and active member of Microsoft COE team .
 
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Go.NET
Build custom interactive diagrams, network, workflow editors, flowcharts, or software design tools. Includes many predefined kinds of nodes, links, and basic shapes. Supports layers, scrolling, zooming, selection, drag-and-drop, clipboard, in-place editing, tooltips, grids, printing, overview window, palette. 100% implemented in C# as a managed .NET Control. Document/View/Tool architecture with many properties&events. Optional automatic layout.
Dundas Software
Dundas Chart for .NET is the most advanced .NET charting package available today.  With an extremely complete feature set, elegant architecture and easy implementation, Dundas Chart can quickly add advanced Charting functionality to enhance and transform ASP.NET and Windows Forms applications.  Whether you are implementing charting into internal projects, or building applications for clients, Dundas Chart offers advanced technology and advanced results to get the most out of data.
Clickatell's SMS Gateway
Clickatell's Developer Solutions allow you to SMS enable any website or application via a range of API's. Learn More about our API connections.
Free access to .NET Memory Management video
Everything you need to know about Garbage Collection, Temporary Objects, Fragmentation, Finalization and common causes of memory leaks in .NET. Watch the video here.
Microsoft Visual Studio 2010
Microsoft Visual Studio 2010 offers more to developers than any other Visual Studio release. Work more productively and collaboratively-with greater control over your work at every step. The Beta 2 can give you a head start on achieving efficiency.
 
   Print Read/Post comments Post a comment  Rate  
   Email to a friend  Bookmark  Similar Articles  Author's other articles  
Download Files:
FileUpload.zip
 
 Post a Feedback, Comment, or Question about this article
Subject:  
Comment:  
Powerful ASP.NET Hosting w/ NO Setup Fees. Click Here!
Become a Sponsor
 Comments
Good Post - Correction Needed by Raghuraman On August 13, 2009
Hi Dhananjay,

This is a good write up. Please correct Uplalod spelling to Upload in the Title.

It would also be good to explain why an interface is needed. Why path's are hard coded ?

Thank you


Reply | Email | Delete | Modify | 
Re: Good Post - Correction Needed by Dhananjay On August 14, 2009
Thanks for Feedback...

sorry for spelling mistake...

and in my sample , I have taken path as the hard coded .. you could read path from config file also....
Reply | Email | Delete | Modify | 
Not able to upload Image file by Abhijit On September 10, 2009
Hi,
I am not able to upload Image file using this same code it showing me following error

The remote server returned an error: NotFound. in Referance.cs file

Reply | Email | Delete | Modify | 

 Hosted by MaximumASP  |  Found a broken link?  |  Contact Us  |  Terms & conditions  |  Privacy Policy  |  Site Map  |  Suggest an Idea  |  Media Kit
Current Version: 5.2009.6.2
 © 1999 - 2009  Mindcracker LLC. All Rights Reserved