我有以下Silverlight代码。它通过给定的网址(postData
)将文件(url
)上传到后端。
public async Task<HttpFileUploadResponse> PostFile(string url, byte[] postData, string fileName, bool isPDF) {
HttpWebRequest request = null;
Uri uri = new Uri(url);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "multipart/form-data";
using (Stream writeStream = await request.GetRequestStreamAsync()) {
await writeStream.WriteAsync(postData, 0, postData.Length);
}
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8)) {
return ParseServerResponse(await readStream.ReadToEndAsync());
}
}
此方法的问题是在到达行await request.GetRequestStreamAsync()
时冻结Internet Explorer。
虽然类似的问题已经解决,例如:
我已按照建议的步骤操作,例如设置ContentLength,但结果是一样的。
此外,我还尝试将网址更改为与另一个后端相对应的网址,该后端当前正在使用我们拥有的其他Silverlight组件。这些组件也有await request.GetRequestStreamAsync()
,但它们运行良好。
我试图更改contentType。我的同事们使用Fiddler来查看请求,但显然没有发送任何内容(我认为这是因为它冻结了)。
有关这里发生的事情的任何想法吗?
修改
我已经反编译了AsynCompatLibExtensions.cs和TaskExtensions.cs来复制GetRequestStreamAsync代码,以便在指令中包含一个带有日志的自定义克隆类。
我已经使用这个类重新编译了解决方案,奇怪的是我没有看到任何日志。因此,我认为它在进入GetRequestStreamAsync时会冻结,但在它到达内部的任何代码行之前都会冻结。
有什么想法吗?