【问题标题】:Can't serialize byte array in WCF无法在 WCF 中序列化字节数组
【发布时间】:2015-06-29 19:17:51
【问题描述】:

当我尝试下载文件时,我正在使用 WCF API,但无法使用字节数组序列化对象。文件很小:104 字节。 对象是:

[DataContract]
  public class File
 {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public byte[] Data { get; set; }

}

我尝试在课堂上使用 KnownType(typeof(byte))、KnownType(typeof(byte[])) 和 KnownType(typeof(Array)),但没有成功。

我也尝试过返回一个带有 Base64 字节数组的字符串,但没有成功。

我在客户端没有错误消息。在我收到 TimeOut 消息(我已经等待超过 1 分钟)之前,WCF 不会返回对象。 我还尝试更改网络配置中的大小。有我的绑定配置:

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
             closeTimeout="0:10:00" openTimeout="1:10:00" receiveTimeout="1:10:00" sendTimeout="1:10:00" allowCookies="false" 
             messageEncoding="Mtom" textEncoding="utf-8">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
                    maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
      <reliableSession enabled="true" inactivityTimeout="00:25:00"/>
      <security mode="None"/>
    </binding>
  </wsHttpBinding>
</bindings>

请帮帮我!!

【问题讨论】:

  • 您已为服务器更改了它,但您的客户端绑定是否配置为接收大于默认 16K 的消息大小?
  • 我真的很困惑。您是在使用 WCF API 还是在制作一个?你为什么要序列化或反序列化你的下载?
  • 我刚刚重读了这个问题,发现您的文件只有 104 个字节,而不是 104K,所以请忽略我的其他评论。
  • @A.sharif 我正在使用 WCF API,并且我正在执行一种允许下载文件的方法。不是大文件。最大 20 兆字节的文件。我在这里阅读了很多关于它的问题,并且我已经尝试了所有解决方案,就像我在这里写的一样。它们中的任何一个都适合我。
  • 所以你要么是服务的客户,要么是服务。你是哪一个?

标签: c# arrays wcf binding bytearray


【解决方案1】:

几天后,我找到了解决问题的方法。 问题出在客户端,而不是服务器端,就像我想的那样。 我忘记在客户端使用maxReceivedMessageSize 标签。 所以,我复制了绑定块中的所有内容,然后粘贴到客户端 webconfig 中,它就可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-03-09
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多