题
我想上传文件或流的数据来我们的网络服务器和我找不到一个体面的方式这样做。我已经试过 WebClient
和 WebRequest
都有他们的问题。
Web客户端
很好,很容易但你没有得到任何通知的异步传已经完成, UploadProgressChanged
事件没有得到所谓的回来有什么有用的。该替代方案是把你的二进制数据和使用的字符串 UploadStringASync
因为那至少你得到一个 UploadStringCompleted
, 问题是你需要很大的ram大文件,因为其编码的所有数据和上传。
HttpWebRequest
比较复杂,但仍然没有什么是必要的,问题我得到的是,尽管它被称为背景线(所谓的),似乎仍然会阻止我的用户界面和整体的浏览器,直到上传已完成其中似乎没有完全正确的。
正常的。网不会有一些合适的 WebClient
方法 OnUploadDataCompleted 和取得进展,但这些不提供力。净...大遗漏我的想法!
没有任何人有任何解决方案,我需要上传多的二进制文件最好有一个取得进展,但我需要执行一些行动时,该文件已经完成了他们的上载。
期待一些帮助。
解决方案
我得到围绕它的是通过举和事件通知。
要点:
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");
}
}
现在统一的皮塔饼因为双重和三重异步通话。
其他提示
谢谢,问题我可以看到与条的是,它不是在谈论Silverlight。具有有限的职能,因为某些原因他们已经删除了一些必要的活动和方法的二进制转让没有任何理由。
我需要使用Silverlight因为我需要/要上传多文件和HTML不允许一个多文件上传。
马特Berseth了一些想法在这一点,可能会有所帮助:
http://mattberseth.com/blog/2008/07/aspnet_file_upload_with_realti_1.html
@丹 -抱歉伙计,我可以发誓马特的文章是关于Silverlight,但很显然不是。把它归咎于这两个大眼镜智利红色的我只是被击落的.:-)
这几乎是我在做什么,问题是我得到的是我UI是越来越锁起来。
你建议我在做什么,我推定该问题是在其他地方所以我用旧的分而治缩小的问题,它不是实际的更新代码,这是我的尝试 调度 请求更新我的进度条在上流码。
谢谢你的建议。