代码之家  ›  专栏  ›  技术社区  ›  Dan

使用Silverlight 2b2上载二进制数据

  •  4
  • Dan  · 技术社区  · 16 年前

    我正试图上传一个文件或数据流到我们的网络服务器,我找不到一个像样的方式做到这一点。我两者都试过了 WebClient WebRequest 两者都有各自的问题。

    网络客户端
    UploadProgressChanged 事件不会被任何有用的内容回调。另一种方法是将二进制数据转换为字符串并使用 UploadStringASync 因为这样至少你会得到一个 UploadStringCompleted ,问题是大文件需要大量的ram,因为它可以对所有数据进行编码并一次性上传。

    HttpWebRequest

    正常的.net确实有一些适当的 网络客户端 OnUploadDataCompleted 和进展,但这些在Silverlight.net中不可用。。。我想这是个大疏忽!

    是否有人有任何解决方案,我需要上传多个二进制文件优先与进展,但我需要执行一些行动时,文件已完成上传。

    希望能在这方面得到一些帮助。

    4 回复  |  直到 13 年前
        1
  •  1
  •   Brian Leahy    16 年前

    我绕过它的方法是通过INotifyPropertyChanged和事件通知。

    要点:

     public void DoIt(){
    this.IsUploading = True;    
    
            WebRequest postRequest = WebRequest.Create(new Uri(ServiceURL));
    
            postRequest.BeginGetRequestStream(new AsyncCallback(RequestOpened), postRequest);
        }
    
    private void RequestOpened(IAsyncResult result){
          WebRequest req = result.AsyncState as WebRequest;
       req.BeginGetResponse(new AsyncCallback(GetResponse), req);
        }
    
      private void GetResponse(IAsyncResult result)
            {
                WebRequest req = result.AsyncState as WebRequest;
                  string  serverresult = string.Empty;
                  WebResponse postResponse = req.EndGetResponse(result);
    
                  StreamReader responseReader = new StreamReader(postResponse.GetResponseStream());
    
    this.IsUploading= False;
    }
    
     private Bool_IsUploading;
            public Bool IsUploading
            {
                get { return _IsUploading; }
              private  set
                {
    
                    _IsUploading = value;
    
                    OnPropertyChanged("IsUploading");
                }
            }
    

        2
  •  0
  •   Dan    16 年前

    谢谢,我在这篇文章中看到的问题是,它并不是在谈论Silverlight,Silverlight的功能有限,出于某种原因,他们无缘无故地删除了一些二进制传输所必需的事件和方法。

    我需要使用Silverlight,因为我需要/想要上传多个文件,HTML不允许上传多个文件。

        3
  •  0
  •   erlando    16 年前

    Matt Berseth对此有一些想法,可能会有所帮助:

    http://mattberseth.com/blog/2008/07/aspnet_file_upload_with_realti_1.html

    @丹

        4
  •  0
  •   Dan    16 年前

    正如您所建议的,我已经在做了,我假设问题出在其他地方,所以我使用旧的分而治之方法来缩小问题的范围,这不是实际的更新代码,而是我试图 上传流代码期间更新我的进度条的请求。

    谢谢你的建议。