Throw ProtocolViolationException при загрузке файла большого размера в Windows Phone 7 - PullRequest
0 голосов
/ 24 августа 2011

Я пишу приложение, которое должно загружать на компьютер файлы очень большого размера (обычно более 150 МБ).Я знал, что WebClient имеет ограничение буфера и может быть использован в моем случае.Поэтому я использовал способ HttpWebRequest, чтобы написать мою функцию загрузки здесь: http://dotnet.dzone.com/articles/2-things-you-should-consider?mz=27249-windowsphone7. Ниже приведен мой код:

        private void _downloadBook(string _filePath)
    {
        Uri _fileUri = new Uri(_filePath);
        //DownloadFileName = System.IO.Path.GetFileName(_fileUri.LocalPath);
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_fileUri);
        request.AllowReadStreamBuffering = false;
        request.BeginGetRequestStream(new AsyncCallback(GetData), request);
    }

    private void GetData(IAsyncResult result)
    {
        HttpWebRequest request = (HttpWebRequest)result.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);

        Stream str = response.GetResponseStream();

        byte[] data = new byte[16 * 1024];
        int read;

        long totalValue = response.ContentLength;
        while ((read = str.Read(data, 0, data.Length)) > 0)
        {
            if (streamToWriteTo.Length != 0)
                Debug.WriteLine((int)((streamToWriteTo.Length * 100) / totalValue));

            streamToWriteTo.Write(data, 0, read);
        }
        streamToWriteTo.Close();
        Debug.WriteLine("COMPLETED");
    }

Однако он выдал исключение ProtocolViolationException со следующим стеком:

Исключение System.Net.ProtocolViolationException было необработанным., Состояние объекта) в HHC_EbookReaderWP7.ComicPage._downloadBook (String _filePath) в HHC_EbookReaderWP7.ComicPage.b__2 () в System.Reflection.RuntimeMethodInfo.InternalInvoke (RuntimeMethodInfo rtmi, объектная привязка объекта, объектная ссылка на объект, объектная ссылка на объект, объектная ссылка на объект, объектная ссылка на объект, объектная ссылка на объект, объектная ссылка на объект, объектная ссылка на объект, связывание объектаisBinderDefault, вызывающая сборка, логический verifyAccess, StackCrawlMark & ​​stackMark) в System.Reflection.RuntimeMethodInfo.InternalInvoke (Object obj, BindingFlagsinvokeAttr, связыватель Binder, параметры Object [], культура CultureInfo, StackCrawlMark & ​​stackMark) в System.Reflection.MethodBase.Invoke (параметры Object obj, Object []) в System.Delegate.DynamicInvokeOne (аргументы Object []) в System.MulticastDelegate.DynamicInvokeImpl (Object [] args) в System.Delegate.DynamicInvoke (Object [] args) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.Dispatch (приоритет DispatcherPriority) в System.Windows.Threading.Dispatcher.OnInvoke (Контекст объекта) в System.Windows.Hosting.CallbackCookie.Invoke (Object [] args) в System.Windows.Hosting.DelegateWrapper.InternalInvoke (Object [] args) в System.Windows.RuntimeHost.ManagedHost.InvokeDelegate (IntPtr pHandle, Int32 nParamCount, ScriptParam [] pParams, ScriptParam & pResult)

Что-то не так с моим кодом?или мне нужно дальше на это?Спасибо.

1 Ответ

0 голосов
/ 24 августа 2011

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx

Как уже упоминалось.Дайте нам точную строку, которая выбрасывает исключение.И в соответствии с документом Silverlight.вам нужно вызвать begingetresponsestream вместо синхронизации.GetResponseStream.Он также показывает некоторые причины исключения нарушения протокола.Проверьте это с документацией WP7.

Чтобы получить точную строку исключения, перейдите в раздел «Отладка». В верхней строке меню vs2010 и перейдите в раздел «Исключения» и установите флажки «Брошенный»

Надеюсь, что этопомогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...