/// <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); }