/// <summary>
        /// Осуществляет получение потока данных для запрашиваемого файла (а также имя файла, MIME-тип, и размер в байтах).
        /// </summary>
        /// <param name="fileDescription">Описание файла.</param>
        /// <param name="fileName">Имя файла.</param>
        /// <param name="fileMimeType">MIME-тип файла.</param>
        /// <param name="fileSize">Размер файла в байтах.</param>
        /// <returns>Поток данных для запрашиваемого файла.</returns>
        private Stream GetFileStream(
            FileDescription fileDescription,
            out string fileName,
            out string fileMimeType,
            out long fileSize)
        {
            if (fileDescription == null)
            {
                throw new ArgumentNullException(nameof(fileDescription));
            }

            Stream fileStream       = null;
            Type   dataObjectType   = null;
            Type   filePropertyType = null;

            if (!string.IsNullOrEmpty(fileDescription.EntityPrimaryKey))
            {
                // Запрашиваемый файл уже был связан с объектом данных, и нужно вычитать из него файловое свойство.
                dataObjectType   = Type.GetType(fileDescription.EntityTypeName, true);
                filePropertyType = Information.GetPropertyType(dataObjectType, fileDescription.EntityPropertyName);
            }
            else
            {
                // Запрашиваемый файл еще не был связан с объектом даных, а значит находится в каталоге загрузок,
                // в подкаталоге с именем fileDescription.FileUplodKey.
                // Получение файлов по ключу загрузки реализовано в DataObjectWebFileProvider.
                filePropertyType = typeof(WebFile);
            }

            if (!HasDataObjectFileProvider(filePropertyType))
            {
                throw new Exception(string.Format("DataObjectFileProvider for \"{0}\" property type not found.", filePropertyType.AssemblyQualifiedName));
            }

            IDataObjectFileProvider dataObjectFileProvider = GetDataObjectFileProvider(filePropertyType);
            object fileProperty = dataObjectFileProvider.GetFileProperty(fileDescription);

            fileStream   = dataObjectFileProvider.GetFileStream(fileProperty);
            fileName     = dataObjectFileProvider.GetFileName(fileProperty);
            fileMimeType = dataObjectFileProvider.GetFileMimeType(fileProperty);
            fileSize     = fileStream.Length;

            return(fileStream);
        }