By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,704 Members | 1,122 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,704 IT Pros & Developers. It's quick & easy.

Web Service Sample for Downloading Files?

P: n/a
Ken
Can anyone point me to some info, which gives me an idea of how to go
about making an ASP.NET web service to download files

I plan to access the web service from a C# Windows App.

Thanks.

*** Sent via Developersdex http://www.developersdex.com ***
Nov 23 '05 #1
Share this Question
Share on Google+
8 Replies


P: n/a
Well... if you are transferring files, you are basically transfering bytes. So a simple way would be to simply return a byte array, which you can then save on the client.
Example:

[WebMethod]
public byte[] GimmeMyFile(string fileName)
{
//Do whatever magic you need to do to get the file and transfer it into a bytestream.
//A simple example is this:
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open);
byte[] barr = new byte[fs.Length];
fs.Read(barr, 0, fs.Length);
return barr;
}
If you have extremely large files or so many requests you would clog up your ws server memory, you can implement your own mechanism for chunking the file and transferring inidividual chunks. An example:

[WebMethod]
public byte[] GimmeMyFile(string fileName, int offset, int length)
{
//Do whatever magic you need to do to get the file and transfer it into a bytestream.
//A simple example is this:
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open);
int len = fs.Length;
//If you are requesting bytes beyond file length, abort.
if (offset > len) return new byte[0];
//else get the file
if (len < offset + length)
{
len = len - offset; //if you are at the end of file, you need less bytes.
}
else
{
len = length;
}
byte[] barr = new byte[len];
fs.Read(barr, offset, len);
return barr;
}

This way you would simply keep calling the method with increasing offsett (by the chunk size) until you get back a chunk that's shorter then the chunk size you requested. Then you know you've reached the end of the file.

If you have larger files or narrow communication channels you may consider compressing the file before transfer (and then uncompressing it again on the client); for this Google up SharpZipLib. Works decently fast.

Enjoy!

Regards,

Sigmund Jakhel
MCSD.NET

"Ken" <krcourville_atsign_msn_period_com> wrote in message news:u%****************@TK2MSFTNGP15.phx.gbl...
Can anyone point me to some info, which gives me an idea of how to go
about making an ASP.NET web service to download files

I plan to access the web service from a C# Windows App.

Thanks.

*** Sent via Developersdex http://www.developersdex.com ***

Nov 23 '05 #2

P: n/a
Well... if you are transferring files, you are basically transfering bytes. So a simple way would be to simply return a byte array, which you can then save on the client.
Example:

[WebMethod]
public byte[] GimmeMyFile(string fileName)
{
//Do whatever magic you need to do to get the file and transfer it into a bytestream.
//A simple example is this:
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open);
byte[] barr = new byte[fs.Length];
fs.Read(barr, 0, fs.Length);
return barr;
}
If you have extremely large files or so many requests you would clog up your ws server memory, you can implement your own mechanism for chunking the file and transferring inidividual chunks. An example:

[WebMethod]
public byte[] GimmeMyFile(string fileName, int offset, int length)
{
//Do whatever magic you need to do to get the file and transfer it into a bytestream.
//A simple example is this:
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open);
int len = fs.Length;
//If you are requesting bytes beyond file length, abort.
if (offset > len) return new byte[0];
//else get the file
if (len < offset + length)
{
len = len - offset; //if you are at the end of file, you need less bytes.
}
else
{
len = length;
}
byte[] barr = new byte[len];
fs.Read(barr, offset, len);
return barr;
}

This way you would simply keep calling the method with increasing offsett (by the chunk size) until you get back a chunk that's shorter then the chunk size you requested. Then you know you've reached the end of the file.

If you have larger files or narrow communication channels you may consider compressing the file before transfer (and then uncompressing it again on the client); for this Google up SharpZipLib. Works decently fast.

Enjoy!

Regards,

Sigmund Jakhel
MCSD.NET

"Ken" <krcourville_atsign_msn_period_com> wrote in message news:u%****************@TK2MSFTNGP15.phx.gbl...
Can anyone point me to some info, which gives me an idea of how to go
about making an ASP.NET web service to download files

I plan to access the web service from a C# Windows App.

Thanks.

*** Sent via Developersdex http://www.developersdex.com ***

Nov 23 '05 #3

P: n/a
Ken <krcourville_atsign_msn_period_com> wrote in news:u#KlgmiYFHA.3356
@TK2MSFTNGP15.phx.gbl:
Can anyone point me to some info, which gives me an idea of how to go
about making an ASP.NET web service to download files

I plan to access the web service from a C# Windows App.


If you are only downloading files, HTTP is a better choice.
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programming is an art form that fights back"

Blog: http://blogs.atozed.com/kudzu
Nov 23 '05 #4

P: n/a
Ken <krcourville_atsign_msn_period_com> wrote in news:u#KlgmiYFHA.3356
@TK2MSFTNGP15.phx.gbl:
Can anyone point me to some info, which gives me an idea of how to go
about making an ASP.NET web service to download files

I plan to access the web service from a C# Windows App.


If you are only downloading files, HTTP is a better choice.
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programming is an art form that fights back"

Blog: http://blogs.atozed.com/kudzu
Nov 23 '05 #5

P: n/a
Ken
Thanks for the responses.

I was researching this a bit more and found mention of using DIME over
http.

The byte array makes sense. If http is better, how so? Can you point
me to sample code?

My basic goal here is to make an application update service where the
remote client will query the web service for new files then download the
files it needs.

*** Sent via Developersdex http://www.developersdex.com ***
Nov 23 '05 #6

P: n/a
Ken
Thanks for the responses.

I was researching this a bit more and found mention of using DIME over
http.

The byte array makes sense. If http is better, how so? Can you point
me to sample code?

My basic goal here is to make an application update service where the
remote client will query the web service for new files then download the
files it needs.

*** Sent via Developersdex http://www.developersdex.com ***
Nov 23 '05 #7

P: n/a
Ken <krcourville_atsign_msn_period_com> wrote in news:OwNUOWeZFHA.3908
@TK2MSFTNGP15.phx.gbl:
The byte array makes sense. If http is better, how so? Can you point
Because if you arent requiring all the extras SOAP provides, its always best
to use the simplest solution that meets your needs, and HTTP can easily
download a file.
me to sample code?
No, but its very easy.
My basic goal here is to make an application update service where the
remote client will query the web service for new files then download the
files it needs.


What kind of query will you be submitting?
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programming is an art form that fights back"

Blog: http://blogs.atozed.com/kudzu
Nov 23 '05 #8

P: n/a
Ken <krcourville_atsign_msn_period_com> wrote in news:OwNUOWeZFHA.3908
@TK2MSFTNGP15.phx.gbl:
The byte array makes sense. If http is better, how so? Can you point
Because if you arent requiring all the extras SOAP provides, its always best
to use the simplest solution that meets your needs, and HTTP can easily
download a file.
me to sample code?
No, but its very easy.
My basic goal here is to make an application update service where the
remote client will query the web service for new files then download the
files it needs.


What kind of query will you be submitting?
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programming is an art form that fights back"

Blog: http://blogs.atozed.com/kudzu
Nov 23 '05 #9

This discussion thread is closed

Replies have been disabled for this discussion.