WebClient.DownloadData 在 Bot Framework 中抛出异常
WebClient.DownloadData throws an exception in Bot Framework
我正在上传一张图片并使用带有 DownloadData 的 WebClient 来获取字节数组,但现在它抛出了一个异常:
Exception: State size exceeded configured limit.
[File of type 'text/plain']
我以前从未在使用完全相同的图像时注意到这种行为。可能出了什么问题?
private async Task SendPhoto_ActivityReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
Activity activity = await result as Activity;
Activity activityReply = activity.CreateReply();
if (0 < activity.Attachments?.Count)
{
if (activity.Attachments.FirstOrDefault().ContentType.Equals("image/jpg") ||
activity.Attachments.FirstOrDefault().ContentType.Equals("image/jpeg") ||
activity.Attachments.FirstOrDefault().ContentType.Equals("image/png") ||
activity.Attachments.FirstOrDefault().ContentType.Equals("image/tiff"))
{
picImage = activity.Attachments.FirstOrDefault().Name;
HttpClient httpClient= new HttpClient();
picImageFile = await httpClient.GetByteArrayAsync(activity.Attachments.FirstOrDefault().ContentUrl);
await context.PostAsync("Want to send another?");
context.Wait(SendAnotherImage_ActivityReceivedAsync);
}
}
}
更新: 将 WebClient 更改为 HttpClient.GetByteArrayAsync,问题仍然存在。
执行 PostAsync 后立即在 Bot Emulator 中显示异常
问题是 picImageFile
是对话框中的一个变量,因此它被保存在状态中,因为对话框是序列化的。两个选项
- 下载图像并以该方法处理它,而不将其保存在内存中
- 将字节数组保存在外部存储器中。
我正在上传一张图片并使用带有 DownloadData 的 WebClient 来获取字节数组,但现在它抛出了一个异常:
Exception: State size exceeded configured limit.
[File of type 'text/plain']
我以前从未在使用完全相同的图像时注意到这种行为。可能出了什么问题?
private async Task SendPhoto_ActivityReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
Activity activity = await result as Activity;
Activity activityReply = activity.CreateReply();
if (0 < activity.Attachments?.Count)
{
if (activity.Attachments.FirstOrDefault().ContentType.Equals("image/jpg") ||
activity.Attachments.FirstOrDefault().ContentType.Equals("image/jpeg") ||
activity.Attachments.FirstOrDefault().ContentType.Equals("image/png") ||
activity.Attachments.FirstOrDefault().ContentType.Equals("image/tiff"))
{
picImage = activity.Attachments.FirstOrDefault().Name;
HttpClient httpClient= new HttpClient();
picImageFile = await httpClient.GetByteArrayAsync(activity.Attachments.FirstOrDefault().ContentUrl);
await context.PostAsync("Want to send another?");
context.Wait(SendAnotherImage_ActivityReceivedAsync);
}
}
}
更新: 将 WebClient 更改为 HttpClient.GetByteArrayAsync,问题仍然存在。 执行 PostAsync 后立即在 Bot Emulator 中显示异常
问题是 picImageFile
是对话框中的一个变量,因此它被保存在状态中,因为对话框是序列化的。两个选项
- 下载图像并以该方法处理它,而不将其保存在内存中
- 将字节数组保存在外部存储器中。