2013-05-16 21 views
0

地鐵應用程序的後臺傳輸(上載器)進度給了我一秒內100%以上的文件大於1MB,如下所示:地鐵應用程序的後臺傳輸(上載器)進度問題

*Running: c5593753-d155-425a-8e25-6b1f90bbff85 
Progress: c5593753-d155-425a-8e25-6b1f90bbff85, Status: Running 
- Sent bytes: 131072 of 1310245 (10%), Received bytes: 0 of 0 
Progress: c5593753-d155-425a-8e25-6b1f90bbff85, Status: Running 
- Sent bytes: 1310245 of 1310245 (100%), Received bytes: 0 of 0* 

因此,我的進度條也顯示出100%,即課程wrong.Now,有時上傳完成後,我得到如下:

*Progress: c5593753-d155-425a-8e25-6b1f90bbff85, Status: Completed 
- Sent bytes: 1310245 of 1310245 (100%), Received bytes: 49 of 49 
Completed: c5593753-d155-425a-8e25-6b1f90bbff85, Status Code: 200 
- Response updated; Header count: 9* 

所以在某種意義上向上裝載機工作但再次這個錯誤導致該文件沒有完成100%,實際上,我已經測試了一個10 MB的文件,是起訴仍然是一樣的。100%和「完成」狀態的進度只有在3分鐘後纔會發生。

我使用的是相同的上傳示例,http://code.msdn.microsoft.com/windowsapps/Background-Transfer-Sample-d7833f61

是我所使用的代碼如下:

private async void StartUpload_Click(object sender, RoutedEventArgs e) 
    { 

     if (ApplicationView.Value == ApplicationViewState.Snapped && !ApplicationView.TryUnsnap()) 
     { 
      rootPage.NotifyUser("File picker cannot be opened in snapped mode. Please unsnap first.", NotifyType.ErrorMessage); 
      return; 
     } 

     FileOpenPicker picker = new FileOpenPicker(); 
     picker.FileTypeFilter.Add("*"); 
     StorageFile file = await picker.PickSingleFileAsync(); 

     Uri uri; 


     string uploadFileURl = "https://dummy.com/Link1/Link2"; 


     if (!Uri.TryCreate(uploadFileURl, UriKind.RelativeOrAbsolute, out uri)) 
     { 
      rootPage.NotifyUser("Invalid URI.", NotifyType.ErrorMessage); 
      return; 
     } 

     if (file == null) 
     { 
      rootPage.NotifyUser("No file selected.", NotifyType.ErrorMessage); 
      return; 
     } 

     BackgroundUploader uploader = new BackgroundUploader(); 

     uploader.Method = "POST"; 
     uploader.SetRequestHeader("uid", "[email protected]"); 
     uploader.SetRequestHeader("pwd","test"); 



     uploader.SetRequestHeader("file_name", file.Name); 
     uploader.SetRequestHeader("p", "/"); 

     //just hard coding the particular file size for sample here 
     Int64 size = 221390; 
     uploader.SetRequestHeader("file_size", size.ToString()); 


     UploadOperation upload = uploader.CreateUpload(uri, file); 



     // Attach progress and completion handlers. 
     await HandleUploadAsync(upload, true); 
    } 

    private async Task HandleUploadAsync(UploadOperation upload, bool start) 
    { 

     try 
     { 
      LogStatus("Running: " + upload.Guid, NotifyType.StatusMessage); 

      Progress<UploadOperation> progressCallback = new Progress<UploadOperation>(UploadProgress); 
      if (start) 
      { 

       // Start the upload and attach a progress handler. 
       await upload.StartAsync().AsTask(cts.Token,progressCallback); 
      } 
      else 
      { 
       // The upload was already running when the application started, re-attach the progress handler. 
       await upload.AttachAsync().AsTask(cts.Token, progressCallback); 
      } 

      ResponseInformation response = upload.GetResponseInformation(); 

      LogStatus(String.Format("Completed: {0}, Status Code: {1}", upload.Guid, response.StatusCode), 
       NotifyType.StatusMessage); 
     } 
     catch (TaskCanceledException) 
     { 
      LogStatus("Canceled: " + upload.Guid, NotifyType.StatusMessage); 
     } 
     catch (Exception ex) 
     { 

       throw; 

     } 
    } 

    private void UploadProgress(UploadOperation upload) 
    { 
     MarshalLog(String.Format("Progress: {0}, Status: {1}", upload.Guid, upload.Progress.Status)); 

     BackgroundUploadProgress progress = upload.Progress; 

     double percentSent = 100; 
     if (progress.TotalBytesToSend > 0) 
     { 
      percentSent = progress.BytesSent * 100/progress.TotalBytesToSend; 
     } 

     //MarshalLog(String.Format(" - Sent bytes: {0} of {1} ({2}%)", 
     // progress.BytesSent, progress.TotalBytesToSend, percentSent)); 

     MarshalLog(String.Format(" - Sent bytes: {0} of {1} ({2}%), Received bytes: {3} of {4}", 
      progress.BytesSent, progress.TotalBytesToSend, percentSent, 
      progress.BytesReceived, progress.TotalBytesToReceive)); 

     if (progress.HasRestarted) 
     { 
      MarshalLog(" - Upload restarted"); 
     } 

     if (progress.HasResponseChanged) 
     { 
      // We've received new response headers from the server. 
      MarshalLog(" - Response updated; Header count: " + upload.GetResponseInformation().Headers.Count); 

      // If you want to stream the response data this is a good time to start. 
      // upload.GetResultStreamAt(0); 
     } 
    } 

回答

0

我相信現在問題解決了。它是一個簡單的DNS設置問題。

如果系統背後代理:

  1. 轉到輸入gpedit.msc - >在計算機配置 - >管理模板 - >網絡 - >網絡隔離。
  2. 應用程序的Internet代理服務器必須使用「IP地址:端口」語法啓用。
  3. 運行命令行:netsh winhttp import proxy source=ie

如果系統不落後代理:

請確保在系統設置中的DNS服務器設置正確。含義,對於首選&輔助DNS服務器必須提供實際的DNS服務器地址,而不是代理服務器地址。