Xamarin - WCF上传大文件报告UIProgressView的进度

时间:2014-02-25 16:44:24

标签: ios wcf xamarin uiprogressview

我已经创建了一个WCF服务,允许使用流媒体通过BasicHttpBinding上传大文件,它运行良好!我想扩展它以显示进度条(UIProgressView),这样当一个大文件以65k块上传时,用户可以看到它正在正常工作。

调用WCF服务的客户端代码是:

BasicHttpBinding binding = CreateBasicHttp ();
BTSMobileWcfClient _client = new BTSMobileWcfClient (binding, endPoint);
_client.UploadFileCompleted += ClientUploadFileCompleted;
byte[] b = File.ReadAllBytes (zipFileName);
using (new OperationContextScope(_client.InnerChannel)) {
   OperationContext.Current.OutgoingMessageHeaders.Add(System.ServiceModel.Channels.MessageHeader.CreateHeader("SalvageId","",iBTSSalvageId.ToString()));
   OperationContext.Current.OutgoingMessageHeaders.Add(System.ServiceModel.Channels.MessageHeader.CreateHeader("FileName","",Path.GetFileName(zipFileName)));
   OperationContext.Current.OutgoingMessageHeaders.Add(System.ServiceModel.Channels.MessageHeader.CreateHeader("Length","",b.LongLength));
   _client.UploadFileAsync(b);
}

在服务器端,我在65k chuncks中读取文件流并报告回调用例程“bytes read”等。一段代码是:

using (FileStream targetStream = new FileStream(filePath, FileMode.CreateNew,FileAccess.Write)) {
  //read from the input stream in 65000 byte chunks
  const int chunkSize = 65536;
  byte[] buffer = new byte[chunkSize];
  do {
    // read bytes from input stream
    int bytesRead = request.FileData.Read(buffer, 0, chunkSize);
    if (bytesRead == 0) break;
    // write bytes to output stream
    targetStream.Write(buffer, 0, bytesRead);
  } while (true);
  targetStream.Close();
}

但是我不知道如何挂钩Xamarin端的回调来接收“字节读取”而不是“要发送的总字节数”,所以我可以更新UIProgressView。

是否有人尝试过这种情况,或者这是否可能?

先谢谢,

0 个答案:

没有答案