System.MethodAccessException при инициализации FileStream для Windows Phone 7 - PullRequest
1 голос
/ 09 октября 2011

Я делаю WP7, который берет изображение из галереи или с камеры и, нажимая кнопку, отправляет его в веб-сервис, кодируя его в строку base64.В настоящее время я использую эмулятор WP7, включенный в VS2010.

Для этого я пытаюсь использовать объект FileStream, который откроет изображение, сохраненное в пути к изображению.Однако, когда я пытаюсь инициализировать FileStream, я получаю в консоли сообщение:

Первое случайное исключение типа 'System.MethodAccessException' произошло в LiveAndesApp.dll

'taskhost.exe '(управляемый): загружен' System.ServiceModel.Web.dll '

Первое исключение типа «System.Xml.XmlException» произошло в System.Xml.dll

Вслед за множеством исключений System.Xml.XmlException.Странно то, что я поместил создание FileStream в оператор try-catch, который перехватывает System.MethodAccessException и E, и программа даже не вводит его, а просто продолжает sendSighting

Что яделать не так и как я могу улучшить это?Большое спасибо!

Вот полный код.Вот как я называю метод для преобразования изображения.

public void next_Click(object sender, EventArgs e)
        {
            //Dependera de si seguimos flujos offline y online. 
            if (!offline_mode)
            {
                NavigationService.Navigate(new Uri("/Pages/SendInformation.xaml?mode=online", UriKind.Relative));
                Controller c = new Controller();
                c.sendSighting();
            }
            else { NavigationService.Navigate(new Uri("/Pages/SendInformation.xaml?mode=offline", UriKind.Relative)); }

Это код для класса Controller.Для краткости опущено все, что касается веб-запроса:

    public class Controller
    {
        public Controller()
        { }

        /// <summary>
        /// Manda un avistamiento al servicio.
        /// </summary>
        public void sendSighting()
        {
            //Obtenemos el avistamiento
            AddSightingFlowObject flow_object = AddSightingFlowObject.getInstance();

            //Creamos el objeto json y lo incorporamos al body del request.
            JObject json = new JObject();

            //Si la imagen no es nula, tenemos que procesarla.
            JArray arr = new JArray(new List<String>());
            if (flow_object.ImageControl != null)
            {
                String image_base_64 = ConvertImageToBase64(flow_object.ImagePath);
                arr.Add(image_base_64);
            }
            else
            {
                arr.Add("");
            }
            json.Add("PhotoURL", arr);
        }


        public String ConvertImageToBase64(String imagePath)
        {
            String image_base_64 = "";
            FileStream fs;
            Byte[] arr;

            try
            {
                fs = new FileStream(imagePath, FileMode.Open);
                arr = new Byte[fs.Length];
                fs.Read(arr, 0, arr.Length);
                image_base_64 = System.Convert.ToBase64String(arr);
            }
            catch (System.MethodAccessException e)
            {
                String error = "Error: " + e.Message + "Stack Trace: " + e.StackTrace;
            }

            return image_base_64;
        }

}

Спасибо за ваше время!: D

1 Ответ

1 голос
/ 26 октября 2011

Использование изолированного хранилища вместо System.IO

FileStream является частью пространства имен System.IO, которое можно заменить на что-то похожее на IsolatedStorageFileStream

Ссылка с помощью

...