/// <summary>
        /// Creates all subfolders to store the filename in a parent folder, relative to a base folder.
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="relativeToFolder"></param>
        /// <param name="parent"></param>
        /// <returns></returns>
        public async System.Threading.Tasks.Task <string> CreateSubFolders(string filename, string relativeToFolder, string parent)
        {
            TrustedUserHeader header = new TrustedUserHeader();

            string[] folders         = Data.Report.GetRelativePathSplitted(filename, relativeToFolder, true);
            string   parentCompleted = parent;

            foreach (string folder in folders)
            {
                await System.Threading.Tasks.Task.Factory.FromAsync(
                    _service.BeginCreateFolder(header, folder, parentCompleted, null, null, null)
                    ,
                    (ar) =>
                {
                    try
                    {
                        CatalogItem catalogItem;
                        _service.EndCreateFolder(ar, out catalogItem);
                    }
                    catch (System.ServiceModel.FaultException ex)
                    {
                        if (ex.Message.Contains("Microsoft.ReportingServices.Diagnostics.Utilities.ItemAlreadyExistsException"))
                        {
                            // Bypass if the folder already exits
                        }
                        else
                        {
                            throw;
                        }
                    }
                });

                parentCompleted += "/" + folder;
            }

            return(parentCompleted);
        }