Перечислите диски с помощью службы WCF в Silverlight C # - PullRequest
1 голос
/ 24 марта 2011

Попытка получить список дисков из приложения на стороне сервера с помощью службы WCF, и я продолжаю получать сообщение об ошибке / диски не найдены Вот мой код на стороне сервера. Надеясь, что кто-то может пролить свет на эту бесконечную проблему «доступа» с помощью silverlight!

[OperationContract]
    public List<AllDriveInfo> ServerDriveInfo()
    {
        try
        {
            DriveInfo[] ComputerDrives = DriveInfo.GetDrives();
            //List<DriveInfo> ComputerDrives = DriveInfo.GetDrives();
            //string[] ComputerDrives = Environment.GetLogicalDrives();
            List<AllDriveInfo> ServerDrives = new List<AllDriveInfo>();

            foreach (DriveInfo drive in ComputerDrives)
            {
                AllDriveInfo NewDrive = new AllDriveInfo();
                NewDrive.DriveLetter = drive.VolumeLabel;
                NewDrive.VolumeName = drive.Name;
                ServerDrives.Add(NewDrive);
            }
            return ServerDrives;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

Недавно я также попробовал другой подход, используя InteropServices с кодом, указанным ниже. Однако в WCF, похоже, нет пространства имен для объекта AutomationFactory, что обычно является ссылкой:

using System.Runtime.InteropServices.Automation;

[OperationContract]
        public List<AllDriveInfo> ServerDriveInfo()
        {

            dynamic fileSystem = AutomationFactory.CreateObject("Scripting.FileSystemObject");
            dynamic drives = fileSystem.Drives;
            List<AllDriveInfo> Drives = new List<AllDriveInfo>();

            foreach (var drive in drives)
            {
                try
                {
                    Drives.Add(new AllDriveInfo
                    {
                        VolumeName = drive.VolumeName,
                        DriveLetter = drive.DriveLetter,
                    });
                }
                catch (Exception ex) { }
            }
           return Drives;
        }

1 Ответ

0 голосов
/ 29 марта 2011

Итак, я наконец-то понял это, и проблема заключалась в том, что на некоторых дисках нет имени тома, общего или свободного пространства, поэтому он просто терзает себя! Ниже мой рабочий образец, который работает безупречно. : D

[OperationContract]
        public List<AllDriveInfo> ServerDriveInfo()
        {
            try
            {
                DriveInfo[] ComputerDrives = DriveInfo.GetDrives();
                List<AllDriveInfo> ServerDrives = new List<AllDriveInfo>();
                foreach (DriveInfo drive in ComputerDrives)
                {
                    AllDriveInfo NewDrive = new AllDriveInfo();

                    NewDrive.DriveLetter = drive.Name.ToString();

                    try { NewDrive.VolumeName = drive.VolumeLabel.ToString(); }
                    catch (Exception ex) { NewDrive.VolumeName = " "; }

                    try { NewDrive.TotalSpace = Convert.ToDouble(drive.TotalSize) / Math.Pow(1024, 3); }
                    catch (Exception ex) { NewDrive.TotalSpace = 0; }

                    try { NewDrive.FreeSpace = Convert.ToDouble(drive.TotalFreeSpace) / Math.Pow(1024, 3); }
                    catch (Exception ex) { NewDrive.FreeSpace = 0; }


                    ServerDrives.Add(NewDrive);
                }
                return ServerDrives;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...