Link to home
Start Free TrialLog in
Avatar of ITPOL
ITPOLFlag for United Kingdom of Great Britain and Northern Ireland

asked on

How to remotely instruct a Server to do a file copy operation (and hopefully track progress)

Hi,

We currently have a desktop application that I will be rewriting shortly.  One of its functions is to make a backup of a large file.  At the moment it simply does something like;  
file.copy(\\MyServer\MyFiles\myfile.txt, \\MyServer\MyBackups\[today.toString]\myfile.txt)

Open in new window

.  

But I reckon there must be a better way of doing this.  I was thinking that there could be a service of some sort running on the server, that receives a notification to run a copy operation.

I started looking at WCF but have no experience, and I couldn't find much help in providing progress.  There are plenty of examples of progress when uploading from client to server.  But I couldn't find anything about providing progress to the client when the operation is completely on the server-side.

any thoughts/suggestions?

Thanks
Avatar of Bill Bach
Bill Bach
Flag of United States of America image

I am not aware of a pre-built service to schedule copy operations remotely -- as I believe that this would be a HUGE security hole waiting to be exploited if it were really a general-purpose tool.  I would therefore provide two possible suggestions:

1) If your backup can be run at a specific time via a Scheduled Task, then I would recommend going that route.  Every night, my server handles a bunch of file-copy operations to backup NAS devices and workstations, but these scripts all fire at the same time every night.
2) If you need to be able to flag the start time of the backup, then you'll need to write a simple program (VBScript or batch files would be easiest).  The easiest solution is to monitor a specific directory, looking for a specific file, such as GO.TXT.  If the file is not there, sleep for 30 seconds and check again.  When the file appears, read it to acquire the filename to copy and continue with the copy operation.  (You could make this even simpler by using GO.BAT and then simply call the batch file.)  After the file copy is done, delete the file.  If you need confirmation, you can create a DONE.TXT file in the same folder, and the client can monitor the folder for when it finishes (and delete the DONE.TXT file as an acknowledgement).
3) Of course, if you truly want a generic remote file copy service, it would be possible to write one.  You would build a service in Windows that posts a TCP Listener, waits for an inbound connection, and then receives the filename and target path, then performs the copy operation.  Adding in a check to the file size, and then copying block by block (instead of relying on the OS COPY commands) could allow for progress reports (i.e. percentage complete) to be sent to the client if needed.  Then, build a custom client GUI that accepts the file/target names, issues the TCP call to the server, and reports back on progress.  This probably could be done in 2-4 hours of development effort.  However, such a solution seems silly to write when pre-built solutions already exist, and I could EASILY see where this could be used to completely replace OS files if used incorrectly, making it a great hacking tool.  Let's just say that I wouldn't put it on MY server.
Avatar of ITPOL

ASKER

Thanks for the response, and your ideas.  Unfortunately options 1 and 2 aren't quite right in my particular scenario.

To elaborate a bit; the Fileserver holds around 500 database files.  The DBs are accessed across the network from the client desktops, not all DBs are in use at once, but any number up to about 15 could be.

The current business process (for which I am rewriting the app) has a certain trigger at which point it copies the DB file to a new date-named folder in a different directory on the server.  This is effectively a snaphot of the database, which can be used to restore to that point in time.

As it is the client that is carrying out the copy, I think it would be more efficient for the client to the notify the server to make the relevant backup.  Security concerns can easily be accounted for, the filepaths can be baked in to the logic of the server-side code, and the only parameter passed from client to the server could be the unique reference of the DB, and we're just talking file services here, not web-availability.

Having done some more reading I think that it may be WCF callbacks that I need to understand (unless there are other options?)
Option 2 would still be far easier (about 5 minutes of VBScript coding), and you would make it easy to extend the environment by just editing the script file text.  Is having a "copy progress" displayed really that critical?
Avatar of ITPOL

ASKER

Agreed it would be easier, but not quite as nice from an end user perspective.  It also means having some thing constantly polling the directories which isn't great.
ASKER CERTIFIED SOLUTION
Avatar of Bill Bach
Bill Bach
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of ITPOL

ASKER

Nice one thank you.  I'll take a look and see what I can come up with.