【问题标题】:ReadTimeout threw an exception when converting byte array to Stream将字节数组转换为 Stream 时,ReadTimeout 抛出异常
【发布时间】:2017-09-20 19:08:36
【问题描述】:

我收到了这个错误

ReadTimeout = '((System.IO.Stream)(ms)).ReadTimeout' threw an exception of type 'System.InvalidOperationException'.

我的代码是。

byte[] imageBytes = Convert.FromBase64String(img);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);     //Problem generates here//

谢谢..

【问题讨论】:

  • 在你指出的那一行没有抛出异常。 ((System.IO.Stream)(ms)).ReadTimeout' 抛出异常...
  • 只有调试时才会出现异常吗?如果你观察对象,它会抛出异常,因为MemoryStream 不支持超时,但它不应该影响你的程序(基于你发布的两行代码)。

标签: c# asp.net


【解决方案1】:

您可以使用ReadTimeout/WriteTimeout 属性仅当流支持超时。 您可以通过CanTimeout 属性进行检查。如果 CanTimeout 属性返回 false,所有对这些属性的访问应该引发 InvalidOperationException。

【讨论】:

    【解决方案2】:

    我使用了以下代码,并且需要将 MemoryStream 用作电子邮件附件:

    string filename=@"C:\images\myimage.img"
    MemoryStream result = new MemoryStream();
    MemoryStream source = new MemoryStream(File.ReadAllBytes(filename));
    source.WriteTo(result);
    

    【讨论】:

      【解决方案3】:

      ReadTimeout 属性必须被覆盖,在基类System.IO.Stream 中它总是抛出System.InvalidOperationException 错误by design

      解决办法是在读取超时时不要将ms转换为基类型:

      int readTimeout = ms.ReadTimeout;
      

      编辑:在发布之前没有检查.. MemoryStream 也不会覆盖该属性 - 这意味着此类流的超时未实现。

      您必须使用其他实现覆盖ReadTimeout 属性的 Stream 类,或者编写您自己的实现。

      【讨论】:

      • 如果异常确实发生在 MemoryStream(byte[], int, int) 构造函数中,正如 Mia 所建议的那样,这难道不是一个框架错误,而且肯定不是设计使然吗?我还认为virtual 方法最终会出现在实际类中,即使你将它转换为它的基类?
      • 当我运行时,我得到“参数无效。”我快速观看了我的流 ms 并由此得出结论 ----ReadTimeout = '((System.IO.Stream)(ms)).ReadTimeout' 引发了类型为 'System.InvalidOperationException' 和 WriteTimeOut=' 的异常((System.IO.Stream)(ms)).ReadTimeout' 引发了“System.InvalidOperationException”类型的异常
      • @C.Evenhuis 不,这个错误不能来自构造函数MemoryStream 我只是仔细检查了它的代码。
      • @Mia 看到我的编辑.. 你只是没有该属性可用。你需要它做什么?
      • @Mia 您可以放心地忽略仅在快速观看对象时出现的异常。
      【解决方案4】:

      你应该注意数据库中的图像类型,如果你的图像太大,那么你必须使用 LONGBLOB 而不是 BLOB。

      【讨论】:

      • LONGBLOB 是 MySQL 的东西。这个问题与数据库无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2011-11-16
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      相关资源
      最近更新 更多