2017-10-09 82 views
0

我上传图片并使用与DownloadData Web客户端来获取字节数组,但现在我抛出一个异常:WebClient.DownloadData抛出以BOT框架异常

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); 
      } 
     } 
    } 

UPDATE:改变了Web客户端来HttpClient.GetByteArrayAsync和问题依然存在。 在执行PostAsync之后,Bot仿真器中出现异常

+0

看看https://stackoverflow.com/questions/46527098/botframework-state-size-exceeded-configured-limit – GrandMasterFlush

+0

你需要附上完整的堆栈跟踪。我怀疑DownloadData会抛出这个异常。它应该是一些Bot框架代码,例如PostAsync。 – Evk

+0

顺便说一句,你可以用'activity.Attachments?.Any()'替换'0 aloisdg

回答

0

问题在于picImageFile是对话框内的变量,因此对话框已被序列化,所以它被保存在状态中。两个选项

  1. 下载该方法中的图像并对其进行处理,而不保存在存储器
  2. 保存在字节数组中的外部存储。
+0

感谢您的解决方案! – nmrlqa4