【发布时间】:2011-06-14 19:16:06
【问题描述】:
我正在使用 System.Net.WebClient 类,我正在尝试使用 UploadFileAsync 方法上传文件。我正在使用 Visual Studio 2010,我的所有项目都设置为使用 .NET 4.0 标准运行时,而不是客户端库。
下面是我正在使用的一小部分代码。大约 90% 的时间我会收到以下错误:
无法将“System.ComponentModel.AsyncOperation”类型的对象转换为“UploadBitsState”类型。
Stack Trace:
at System.Net.WebClient.UploadFileAsyncWriteCallback(Byte[] returnBytes, Exception exception, Object state)
at System.Net.WebClient.UploadFileAsync(Uri address, String method, String fileName, Object userToken)
at FileUpload._StartUpload()
我尝试上传到的 FTP 服务器在我的组织内部,但一台运行 IPSwitches WS-FTP,另一台运行 IIS 6.0 FTP 站点,我在两台服务器上都遇到了同样的问题。
我已经到处寻找有类似问题的其他人,但无济于事。
发生异常的实际行是_Client.UploadFileAsync方法调用。
private void _StartUpload()
{
try
{
_Client = new WebClient
{
Credentials = _Credentials
};
_Client.UploadProgressChanged += ProgressChanged;
_Client.UploadFileCompleted += UploadCompleted;
_Client.UploadFileAsync(FileBeingUploaded, "STOR", _LocalFile, null);
}
catch (Exception exception)
{
// Methods calls removed for brevity
}
}
private void UploadCompleted(Object sender, UploadFileCompletedEventArgs e)
{
// Methods calls removed for brevity
}
private void ProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
// Methods calls removed for brevity
}
【问题讨论】:
-
同步执行是否有效?您是否尝试过使用诸如
tcpdump或WireShark之类的数据包嗅探器来查看流量? -
我没有尝试过同步调用。至于嗅探器,我没有尝试观察这些具体错误,但鉴于异常在 .Net 框架内并且是演员表问题,我不确定 TCP 流量分析会显示什么。
-
你上传的文件
_LocalFile是静态文件吗?换句话说,是否有任何文件的内容在上传时被修改/更新的可能性?我问是因为我可以在那种特定情况下复制你的错误。 -
遗憾的是没有。私有字符串_LocalFile;私有 NetworkCredential _Credentials;不过,这是一个有趣的观察,我会看看是否有任何东西可以与文件名混淆。