1

空のブロブストレージに写真をアップロードしようとしましたが、それを達成するのが非常に難しかったです。Silverlight 5プラグインがクラッシュしたり、HttpWebRequestを使用しているときに要求が破棄されました。

アップロードするには、以下のコードを使用してI'am:

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(); 
          } 
         }); 
       }); 
     } 

私は私の者協会・マシン(Windows 2008のR2の64ビット版とVMware社)上でこのコードを実行すると、私は中にいることを呼び出すときに、私は、プラグインのクラッシュを取得私のレベルで使用できる情報はありません。

個人用ボックスのWindows 7の最終的な64bitでこのコードを実行すると、一部のファイルがアップロードされず、フィドラーで状態が発生することがあります。セッションはクライアント、Fiddler、またはサーバーによって中止されました。

これを呼び出すコードは、次のとおりです。誰かが私が間違っているのmは何

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); 
      } 
     } 

見ていますか?

ありがとうございます

+0

私は次のようなエラーに System.Net.WebExceptionを得る:[HttpWebRequest_WebException_RemoteServer] 引数:NOTFOUND デバッグリソース文字列は使用できません。多くの場合、キーと引数は問題を診断するのに十分な情報を提供します。 http://go.microsoft.com/fwlink/?linkid=106663&Version=5.0.61118.0&File=System.Windows.dll&Key=HttpWebRequest_WebException_RemoteServer at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Funcを参照してください。 2.Invoke(T arg) at System.Threading.Tasks.TaskFactory'1.FromAsyncCoreLogic(IAsyncResult ... –

+0

ファイルが800Kを超えていると思われますが、画像を3〜5Megで試してみたところ、Not Found毎回。 銀色のレポートが見つからないとタイムアウトすることはありますか? –

答えて

0

この問題は、カスペルスキーインターネットセキュリティに関連しているようです。無効にすると動作します。

関連する問題