gpt4 book ai didi

调用 System.Net.WebClient.UploadFileAsync 时出现 .NET 错误

转载 作者:行者123 更新时间:2023-12-03 19:37:44 25 4
gpt4 key购买 nike

我正在使用 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
}

最佳答案

这有点意思。看引用源(WebClient.cs),第一行UploadFileAsyncWriteCallback施放 state UploadBitsState 的参数.

在方法UploadFileAsync ,有一些异常处理代码如下:

catch (Exception e)
{
if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException)
{
throw;
}
if(fs != null){
fs.Close();
}
if (!(e is WebException || e is SecurityException)) {
e = new WebException(SR.GetString(SR.net_webclient), e);
}
UploadFileAsyncWriteCallback(null, e, asyncOp);
}
asyncOpAsyncOperation 类型.

看起来像是对 UploadFileAsyncWriteCallback 的调用这是一个错误,因为它将错误类型的对象传递给回调。回调执行 C 风格的转换(即 UploadBitsState uploadState = (UploadBitsState)state; )。

但这只有在上传过程中触发异常时才会发生。

您的 ProgressChanged 中有没有可能?或 UploadCompleted事件处理程序抛出异常?您传递给 UploadFileAsync 的参数或其中一个参数是无效的。

更多信息
UploadFileAsync 中确实看起来确实存在错误.例如,以下抛出 InvalidCastException , 当根据文档它应该抛出 WebException .
var targetUri = new Uri("ftp://example.com/file.txt");
var srcFile = string.Empty; // documentation says this will throw WebException
var client = new WebClient();
client.UploadFileAsync(targetUri, "STOR", srcFile, null);

我已经在 https://connect.microsoft.com/VisualStudio/feedback/details/675575/webclient-uploadfileasync-throws-invalidcastexception 报告了这个错误。

但是,从表面上看,我会说引发异常的原因在于您的代码。不幸的是,不可能说在哪里,因为 UploadFileAsync正在丢失异常信息。也许,正如其他人所指出的,尝试同步上传会更清楚地说明这个问题。

关于调用 System.Net.WebClient.UploadFileAsync 时出现 .NET 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6348804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com