public RemoteFileInfo DownloadFile(DownloadRequest request)
        {
            try
            {
                // get some info about the input file
                var filePath = Path.Combine("Upload", request.FileName);
                var fileInfo = new FileInfo(filePath);

                // report start

                
                _log.Info("Sending stream " + request.FileName + " to client - Size: " + fileInfo.Length + " - " + Utility.GetMethodDescription());

                Console.WriteLine(@"Sending stream " + request.FileName + @" to client");
                Console.WriteLine(@"Size " + fileInfo.Length);

                // check if exists
                if (!fileInfo.Exists) throw new FileNotFoundException("File not found", request.FileName);

                // open stream
                var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

                // return result
                var result = new RemoteFileInfo {FileName = request.FileName, Length = fileInfo.Length, FileByteStream = stream};
                return result;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nel download del file: " + Utility.GetMethodDescription() + " - fileName:" + request.FileName, ex);
                throw;
            }
        }
        public void UploadFile(RemoteFileInfo request)
        {
            try
            {
                // report start
                
                _log.Info("Start uploading " + request.FileName + " to client - Size: " + request.Length + " - " + Utility.GetMethodDescription());

                // create output folder, if does not exist
                if (!Directory.Exists("Upload")) Directory.CreateDirectory("Upload");

                // kill target file, if already exists
                var filePath = Path.Combine("Upload", request.FileName);
                if (File.Exists(filePath)) File.Delete(filePath);

                const int chunkSize = 2048;
                var buffer = new byte[chunkSize];

                using (var writeStream = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write))
                {
                    do
                    {
                        // read bytes from input stream
                        int bytesRead = request.FileByteStream.Read(buffer, 0, chunkSize);
                        if (bytesRead == 0) break;

                        // write bytes to output stream
                        writeStream.Write(buffer, 0, bytesRead);
                    } while (true);

                    // report end
                    
                    _log.Info("Upload terminato - " + Utility.GetMethodDescription());


                    writeStream.Close();
                }
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nell'upload del file: " + Utility.GetMethodDescription() + " - fileName:" + request.FileName, ex);
                throw;
            }
        }