Backup plugin for existing Web site, C#; including FTP 'push' and to Azure Blobs
$30-250 USD
Zamknięte
Opublikowano ponad 11 lat temu
$30-250 USD
Płatne przy odbiorze
We're looking for someone to satisfy a very simple interface, IBackup:
public interface IBackup
{
///
/// Backs-up the specified file.
///
/// The file.
void Backup(string filename);
///
/// Marks that the specified file needs to be deleted (or not backed-up if it's not been yet).
///
/// The file.
void Delete(string filename);
///
/// Marks that the specified file has been moved from one location to another
///
/// The old file.
/// The new file.
void Move(string oldFilename, string newFilename);
}
The filename is a virtual reference to that file, for instance, folder/subfolder/[login to view URL]
The requirement is that the implementation will take this request and immediately return in a non-blocking way (the call to this backup doesn't want to wait for the backup process, but just register the backup and move on). Several files might be added to the Web site at once, so your implementation will need to keep a queue of files and then process them in its own thread.
We need implementations that:
1. Take a Windows file and copy it to another Windows file location, possibly on a network
2. Take a Windows file and FTP it to a given server
3. Take a Windows file and copy it to Azure blob storage
4. Take an Azure blob and FTP it to a given server
5. Take an Azure blob and copy it to another Azure blob
I mention items 3-5 because that's where we want to head, but points 1 and 2 are all we need immediately.
I'd recommend setting up a number of implementations of IBackup for each job, and using a constructor to get what you need to make it work. We use Ninject so can inject whatever's needed. For instance:
Public class NetworkBackup : IBackup
{
Public NetworkBackup(IFile fileObject, IDirectory directoryObject, string sourceLocation, string backupLocation)
{
// IFile is an interface we use which exactly matches [login to view URL]; likewise IDirectory matches [login to view URL]
// We use these so we can swap them out when creating the Azure version of this site, which will use blobs instead of the file system
// sourceLocation would be the full path to the parent of the site, eg, c:WebsitesSite1Content
// backupLocation would be the full path to the base of the backup location, eg, c:BackupsSite1Content
}
... implementation ...
}
Also:
public class FtpBackup : IBackup
{
Public FtpBackup(string host, string username, string password, ... etc ...)
{
...
}
}
Then we can pick and choose which implementation we use, and even have a:
Public class ComboBackup : IBackup
{
Public ComboBackup(IList backupSystems)
{
...
}
}
Which would let us inject the FTP and network implementations and it would loop through and backup using both simultaneously.
The most important bit is the non-blocking asynchronous nature of it. It MUST NOT stop the Web site from responding. If you need to report errors we have a logging system I can give you the interface for too.
Nothing, even the interface, is set in stone yet, so if you find you need it to be done differently, please let me know as soon as possible and we'll amend it. The constructors are of course totally open to what you need, so try not to hard-code any requirements.
When it comes to FTP an open-source FTP library will be fine to use, particularly if it's available through nuget (our preferred way of getting libraries), but if a commercial library makes life much easier let me know and I'll certainly consider it.
This is a "made for hire" project. We will retain copyright and ownership of the solution.
I am interested for this project. I have read all of your requirement and Im confident that I can all these.
I have experience on .NET, C# Programming
Though Im new to this site but worked on other lance sites before, so Im consistent with related projects.
So you can select me for the project.