Сбой плагина Silverlight 5 или запрос отменен при использовании HttpWebRequest - PullRequest
1 голос
/ 21 февраля 2012

Я пытаюсь загрузить изображения в хранилище BLOB-объектов Azure, и у меня возникают большие трудности с этим.

Я использую код ниже для загрузки:

public static void Upload(this Stream payLoad, string uri)
        {
            var webRequest = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(new Uri(uri));
            webRequest.Method = "PUT";
            webRequest.ContentLength = payLoad.Length;

            var state = new HttpWebRequestAsyncState<Stream>() { HttpWebRequest = webRequest, PayLoad = payLoad };

            Task.Factory.FromAsync<Stream>(
                webRequest.BeginGetRequestStream, 
                webRequest.EndGetRequestStream, state)
                .ContinueWith(t1 =>
                {
                    var asyncState1 = (HttpWebRequestAsyncState<Stream>)t1.AsyncState;

                    using (var requestStream = t1.Result)
                    {
                        int bytesRead = 0;
                        byte[] buffer = new Byte[4096];
                        while ((bytesRead = asyncState1.PayLoad.Read(buffer, 0, buffer.Length)) != 0)
                        {
                            requestStream.Write(buffer, 0, bytesRead);
                            requestStream.Flush();
                        }
                    }

                    Task.Factory.FromAsync<WebResponse>(
                        asyncState1.HttpWebRequest.BeginGetResponse, 
                        asyncState1.HttpWebRequest.EndGetResponse,
                       asyncState1)
                       .ContinueWith(t2 =>
                       {
                           var asyncState2 = (HttpWebRequestAsyncState<Stream>)t2.AsyncState;
                           if (asyncState2.PayLoad != null) 
                           {
                               asyncState2.PayLoad.Close();
                           }

                           using (var responce = t2.Result)
                           {
                               if (responce != null) responce.Close();
                           }
                       });
                });
        }

Когда я запускаю этот код на своем компьютере для разработки (vmware с windows 2008 R2 64bit), у меня возникает сбой плагина, когда я вызываю его в цикле, без информации, которую я могу использовать на своем уровне.

Когда я запускаю этот код на моем персональном ящике Windows 7 Ultimate, 64-битные, некоторые файлы загружаются, некоторые нет и имеют статус в fiddler: сеанс был прерван клиентом, Fiddler или сервером.

Код, который вызывает это:

private void FileUploadButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog() { Multiselect = true, Filter = "Image files (*.jpg)|*.jpg" };

            if (ofd.ShowDialog() != true) return;

            foreach (var file in ofd.Files)
            {
                string uri = "http://xxxx.blob.core.windows.net/test/" + file.Name + "?sr=c&si=dev&sig=%2FIKx1NhY8FzgYge7XXXXXXXXXXXXXXXXXXX";
                file.OpenRead().Upload(uri);
            }
        }

Кто-то видит, что я делаю неправильно?

Заранее спасибо

1 Ответ

0 голосов
/ 27 февраля 2012

Проблема, похоже, связана с интернет-безопасностью Касперского.Когда отключить его, он работает.

...