the classic .asmx web services. To upload files in the silverlight applications.
Steps :
- Create a silverlight project in Visual Studio 2008 or beyond. As silverlight 3.0 is released so you can use that or go with Silverlight 2.0 hardly matters.
- Make these important changes in the properties of FileUploadASMX.Web project
- Right click on FileUploadASMX.Web.
- Select Properties
- Under Web tab Select Specific port and give the port number I am using port number 1366 Note: we are using specific port so that every time we need not to run the web service to use it and it wont change its address. Neither we ned it to host on IIS if you don't want to use specifc port then either host your web service on IIS or run the webservice every time and update the service refrence each time before running the application.
- Save The Properties Page and close it.
- Add a new Web service to the FileUploadASMX.Web project and name it as uploadService.asmx
- Include the name space "System.IO"
using System.IO;
- Create a new web method
//method for upload the files. This will be called from Silverlight code behind.
[WebMethod]
public string UploadFiles(string strFileName, byte[] byFile, string strFileNo)
{
try
{
if (byFile.Length > 0)
{
string strFilePath = "D:\\meet\\" + 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 "";
}
} - Save the Service Leaving other settings as it is. or you want then you can delete the Helloworld example web method.
- Coming back to the FileUploadASMX project.
- Create A class FilesClass
public class FilesClass
{
public FilesClass()
{
//do nothing
}
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;
}
}
} - Create Two Buttons in the Mainpage.xaml.
- To Chosse File
- To upload File At the specifed folder in the Web Service
<Grid x:Name="LayoutRoot" Background="White" Width="400" Height="50">
- Add the service refernce to the silverlight project name it "uploadService"
- Navigating to the event for choose button
private void Button_Click(object sender, RoutedEventArgs e)
{
//create a oblect for file open dialog
OpenFileDialog op = new OpenFileDialog();
//show the file browser dialog to select file
op.ShowDialog();
//if any file is selected
if (op.File != null && op.File.Name != "")
{
//check the file size. It shoud be less than 1MB
if (op.File.Length < 1048576)
{
//create a new fill class object to maintain the file content
FilesClass obj = new FilesClass();
//assign file
obj.PropFileName = op.File;
//assing file number
obj.PropNumber = iFileCount.ToString();
//add the file object to files list collection
fl.Add(obj);
iFileCount++;
}
//IF size is greater then 1 MB show the message
else
{
MessageBox.Show("Max file size is 1 MB");
}
}
//display message to the user if no file is selected
else
{
MessageBox.Show("Select File");
}
} - Now Lets code for the upload event Navigate to the event
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (fl.Count > 0)
{
//loop through the files and upload the files by passing it to web service.
for (int count = 0; count < fl.Count; count++)
{
uploadService.uploadServiceSoapClient x = new uploadService.uploadServiceSoapClient();
//here is the event hadndler, whihc will be invoked for every file upload
x.UploadFilesCompleted += new EventHandler<uploadService.UploadFilesCompletedEventArgs>(UploadFileComplted);
//read the file from file class
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();
//call the upload file methods async event, which will upload the files asynchronously
x.UploadFilesAsync(obj.PropFileName.Name, by, obj.PropNumber);
}
}
}
private void UploadFileComplted(object sender, uploadService.UploadFilesCompletedEventArgs e)
{
if (e.Result != "")
{
MessageBox.Show("File Uploaded");
}
}
Thanks and Regards
Meetu Choudhary
MVP.
My Blog || My Web || My Forums
The remote server returned an error: NotFound.
ReplyDeletepublic ImagineCup.serviceReferenceImagineCup.UploadFilesResponse EndUploadFiles(System.IAsyncResult result) {
object[] _args = new object[0];
ImagineCup.serviceReferenceImagineCup.UploadFilesResponse _result = ((ImagineCup.serviceReferenceImagineCup.UploadFilesResponse)(base.EndInvoke("UploadFiles", _args, result)));
return _result;
}
How do ı fix this error? any idea?