How to copy a file from web service to a remote client?

Discussion in 'ASP .Net' started by =?Utf-8?B?ZGF2aWQ=?=, Aug 18, 2005.

  1. I have made a test: copy a text file to clinet side. But fails.
    What I did is that create a web method in web services that read a text in
    server side and return the text file as string. On the client side, the
    method is called in a windows form client which stores the string and write
    the string to a file. Though the file contains the original content but it
    just a one-line string which is not the original copy.


    Is there a general model which can copy the original file (any type) from
    Web services server side to a remote client side? How to do that?

    Thanks for any hint and help.

    David
     
    =?Utf-8?B?ZGF2aWQ=?=, Aug 18, 2005
    #1
    1. Advertising

  2. I can handle text file correctly by spliting string by token. But how to
    handle other types of files, for example, binary files.

    David

    "david" wrote:

    > I have made a test: copy a text file to clinet side. But fails.
    > What I did is that create a web method in web services that read a text in
    > server side and return the text file as string. On the client side, the
    > method is called in a windows form client which stores the string and write
    > the string to a file. Though the file contains the original content but it
    > just a one-line string which is not the original copy.
    >
    >
    > Is there a general model which can copy the original file (any type) from
    > Web services server side to a remote client side? How to do that?
    >
    > Thanks for any hint and help.
    >
    > David
    >
     
    =?Utf-8?B?ZGF2aWQ=?=, Aug 18, 2005
    #2
    1. Advertising

  3. =?Utf-8?B?ZGF2aWQ=?=

    jasonkester Guest

    Could you go into a bit more detail as to what you've tried?
    Specifically, are you setting the content-type, clearing the cache, and
    streaming the file across? If so, what errors are you seeing? Does
    the code below look familiar? If so, you're at least on the right
    track.

    Response.ContentType = yourContentType; // ie.,
    "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment; filename=" +
    FileName);
    Response.Write(yourFileContent);
    Response.End();

    Jason Kester
    Expat Software Consulting Services
    http://www.expatsoftware.com/
     
    jasonkester, Aug 18, 2005
    #3
  4. I do not go this way (HTTP request/response). I created a XML web services
    class, say A, on werver side which contains Webmethods that will be called by
    the proxy at lient side. Those webmethods read files in server side and
    return the file content as a string. In client side, I create a windows form
    application, B, which generates a proxy A' of A and uses A' to call those
    Webmethods and gets the string of the file content. So I could virtually copy
    a file from Server side to the Client side.

    Is there a general model to it for any type of file?

    David

    "jasonkester" wrote:

    > Could you go into a bit more detail as to what you've tried?
    > Specifically, are you setting the content-type, clearing the cache, and
    > streaming the file across? If so, what errors are you seeing? Does
    > the code below look familiar? If so, you're at least on the right
    > track.
    >
    > Response.ContentType = yourContentType; // ie.,
    > "application/vnd.ms-excel";
    > Response.AddHeader("content-disposition", "attachment; filename=" +
    > FileName);
    > Response.Write(yourFileContent);
    > Response.End();
    >
    > Jason Kester
    > Expat Software Consulting Services
    > http://www.expatsoftware.com/
    >
    >
     
    =?Utf-8?B?ZGF2aWQ=?=, Aug 18, 2005
    #4
  5. =?Utf-8?B?ZGF2aWQ=?=

    jasonkester Guest

    No.

    If you're using .NET's built-in SOAP functionality, you're going to be
    dealing in XML files. This pretty much limits your returned content to
    plain text. You'll probably run into much more pain trying to work
    around all the issues you'll run into than you would dealing with a
    simple HttpRequest to an .aspx.

    Jason Kester
    Expat Software Consulting Services
    http://www.expatsoftware.com/
     
    jasonkester, Aug 18, 2005
    #5
  6. But I want to use windows application in client side as thick client (not web
    client). The reason is that we have some larger windows based applications
    which read and process image files locally (not common use on web such as
    jpg, gif, ...). So I need to build a database which indicates the files
    location and get the files from remote server. What can I do? use COM/DCOM,
    winsocket, or embedded an application into HTML web browser? Based on your
    experience and knowledge, what is the better way to do it?

    I know how to embedded Java applet into HTML. How about MS windows
    application?

    Thank you for your help.

    "jasonkester" wrote:

    > No.
    >
    > If you're using .NET's built-in SOAP functionality, you're going to be
    > dealing in XML files. This pretty much limits your returned content to
    > plain text. You'll probably run into much more pain trying to work
    > around all the issues you'll run into than you would dealing with a
    > simple HttpRequest to an .aspx.
    >
    > Jason Kester
    > Expat Software Consulting Services
    > http://www.expatsoftware.com/
    >
    >
     
    =?Utf-8?B?ZGF2aWQ=?=, Aug 18, 2005
    #6
  7. When I read XML Web Services book, it states that we can use this kind of
    technology to transfer Text file and binary files, but I can not find any
    example.

    By the way, when they talk about binary serialized od Web Services, what
    does it exactly mean?

    David

    "david" wrote:

    > But I want to use windows application in client side as thick client (not web
    > client). The reason is that we have some larger windows based applications
    > which read and process image files locally (not common use on web such as
    > jpg, gif, ...). So I need to build a database which indicates the files
    > location and get the files from remote server. What can I do? use COM/DCOM,
    > winsocket, or embedded an application into HTML web browser? Based on your
    > experience and knowledge, what is the better way to do it?
    >
    > I know how to embedded Java applet into HTML. How about MS windows
    > application?
    >
    > Thank you for your help.
    >
    > "jasonkester" wrote:
    >
    > > No.
    > >
    > > If you're using .NET's built-in SOAP functionality, you're going to be
    > > dealing in XML files. This pretty much limits your returned content to
    > > plain text. You'll probably run into much more pain trying to work
    > > around all the issues you'll run into than you would dealing with a
    > > simple HttpRequest to an .aspx.
    > >
    > > Jason Kester
    > > Expat Software Consulting Services
    > > http://www.expatsoftware.com/
    > >
    > >
     
    =?Utf-8?B?ZGF2aWQ=?=, Aug 18, 2005
    #7
  8. =?Utf-8?B?ZGF2aWQ=?=

    jasonkester Guest

    david wrote:
    > But I want to use windows application in client side as thick client (not web
    > client).


    Right. That was assumed. Remember, the SOAP web service you are
    trying to build is doing a HTTP post behind the scenes. Its
    abstraction appears to be hindering you in this case rather than
    helping. Thus, you are probably better off deconstructing the process.

    So again, try looking at the HttpRequest object from your winform code.
    Build a simple .aspx page to act as your web service and document
    server. Your client HttpRequest will give you a HttpResponse that will
    contain document information, a filename, and a Stream that you can use
    to store the document locally. Here is a bit of code that might get
    you pointed in the right direction:


    HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
    webRequest.Method = "GET";

    HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
    BinaryReader responseReader = new
    BinaryReader(response.GetResponseStream());

    if (response.ContentLength > -1)
    {
    byte[] buffer = new byte[response.ContentLength];

    FileStream fs = new FileStream(fileName, FileMode.Create);
    BinaryWriter writer = new BinaryWriter(fs);

    long pos=0;
    int count=1;
    while (count > 0 && pos < response.ContentLength)
    {
    count = responseReader.Read(buffer, (int)pos,
    (int)(response.ContentLength - pos));
    writer.Write( buffer, (int)pos, count);
    pos += count;
    }

    writer.Close();
    fs.Close();
    }



    Jason Kester
    Expat Software Consulting Services
    http://www.expatsoftware.com/
     
    jasonkester, Aug 18, 2005
    #8
  9. Thank you, Jason. I will try it.

    Your whole sample code is for windows client, is that right?
    And url should point to the file location and name at the web server side.

    David


    "jasonkester" wrote:

    > david wrote:
    > > But I want to use windows application in client side as thick client (not web
    > > client).

    >
    > Right. That was assumed. Remember, the SOAP web service you are
    > trying to build is doing a HTTP post behind the scenes. Its
    > abstraction appears to be hindering you in this case rather than
    > helping. Thus, you are probably better off deconstructing the process.
    >
    > So again, try looking at the HttpRequest object from your winform code.
    > Build a simple .aspx page to act as your web service and document
    > server. Your client HttpRequest will give you a HttpResponse that will
    > contain document information, a filename, and a Stream that you can use
    > to store the document locally. Here is a bit of code that might get
    > you pointed in the right direction:
    >
    >
    > HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
    > webRequest.Method = "GET";
    >
    > HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
    > BinaryReader responseReader = new
    > BinaryReader(response.GetResponseStream());
    >
    > if (response.ContentLength > -1)
    > {
    > byte[] buffer = new byte[response.ContentLength];
    >
    > FileStream fs = new FileStream(fileName, FileMode.Create);
    > BinaryWriter writer = new BinaryWriter(fs);
    >
    > long pos=0;
    > int count=1;
    > while (count > 0 && pos < response.ContentLength)
    > {
    > count = responseReader.Read(buffer, (int)pos,
    > (int)(response.ContentLength - pos));
    > writer.Write( buffer, (int)pos, count);
    > pos += count;
    > }
    >
    > writer.Close();
    > fs.Close();
    > }
    >
    >
    >
    > Jason Kester
    > Expat Software Consulting Services
    > http://www.expatsoftware.com/
    >
    >
     
    =?Utf-8?B?ZGF2aWQ=?=, Aug 19, 2005
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Alex
    Replies:
    2
    Views:
    1,253
  2. Replies:
    26
    Views:
    2,140
    Roland Pibinger
    Sep 1, 2006
  3. dgleeson422111

    Consuming local web service - ok, remote web service -problem?

    dgleeson422111, Jan 26, 2010, in forum: ASP .Net Web Controls
    Replies:
    0
    Views:
    913
    dgleeson422111
    Jan 26, 2010
  4. Replies:
    0
    Views:
    220
  5. dgleeson422111

    consume local web service -ok consume remote service - Not OK

    dgleeson422111, Jan 26, 2010, in forum: ASP .Net Web Services
    Replies:
    2
    Views:
    1,630
    dgleeson422111
    Jan 31, 2010
Loading...

Share This Page