A multi-threaded FTP server running on a VM role in Azure. Same code will need to be ported to a Web role as the requirement rises; it is important that the initial code is able to support this with minimal changes (no local storage, no local settings, etc)
This FTP service will need to support multiple concurrent connections.
All ftp users will be registered; anonymous logins will not be permitted and any incorrect attempts to login will get the standard bad username or password reply from ftp services.
Once authenticated against an Azure SQL database, each valid user will be directed to their own home directory, also defined in a ‘clients’ table. This home directory will be held on Azure blob storage, either via their storage API or mapped drive letter.
When an ftp user starts to upload files, the service will need to write a new record of the user, the start time and other key data to a ‘jobs’ database table.
At the end of each individual file upload, the FTP service will create a new record in the ‘files’ table, with a reference to the job, the client and some other detail about the file its written. It will then post a simple message to a defined queue in Azure that will be used to notify the next logical service that a new work item exists.
The ftp service needs to handle bad client disconnects by closing the connection after a defined period of inactivity or closing gracefully when the client sends a disconnect message.
The ftp server will then resume listening for the next ftp service request.
I would like this code to be written in C# and the project delivered as source code.