代码之家  ›  专栏  ›  技术社区  ›  Arve Systad

如何将大于16K的文件上载到WCF服务?

  •  1
  • Arve Systad  · 技术社区  · 15 年前

    长话短说:

    • 制作web应用程序

    • 每个用户配置文件只包含一个配置文件映像,该映像存储在数据库中

    • 底层使用ADO.NET实体框架进行数据访问和类之间的关系

    • 将图像插入应用程序底部数据访问层上的数据库可以正常工作

    • 在顶层,在mvc应用程序中,我们使用wcf获取要显示的配置文件图像。显示图像无论大小都可以,这意味着上传图像是唯一的问题。

    • 在我上传的图片功能中,我可以上传图片到16K。没有更大的。

    • 我找到了所有 maxBufferSize maxReceivedMessageSize 解决方案中所有app.config和web.config文件中的属性,并将值更改为1MB(1048 576)

    这是我得到的错误:

    格式化程序在 正在尝试反序列化邮件: 尝试时出现了一个错误 反序列化参数 http://www.mydomain.com/contracts/profile/2009/07:userProfile . InEnRead消息是“那里” 是反序列化对象的错误。 类型的 myproject.commons.businessobjects.userprofile。 最大数组长度配额(16384) 读取XML时已超过 数据。这个配额可以增加 更改maxarrayleng属性 关于XmlDictionaryReaderQuotas 创建XML时使用的对象 读者。1号线,44978号位置。 请参阅innerException了解更多 细节。

    它还告诉我错误的源文件是服务引用中的reference.cs。 ……现在我基本上不明白这到底是从哪里来的。有人有线索吗?

    1 回复  |  直到 15 年前
        1
  •  4
  •   marc_s    15 年前

    错误信息说明了一切,真的:-)

    最大数组长度配额(16384) 读取XML时已超过 数据。

    除了所有maxBufferSize等设置之外,还有一组设置称为 ReaderQuotas 自定义绑定时可以设置的。如果“maxarraylength”默认为16'384,则为这些设置之一。

     <bindings>
        <wsHttpBinding>
           <binding name="Default" bypassProxyOnLocal="true"
                    useDefaultWebProxy="true" >
               <readerQuotas maxArrayLength="16384"
                             maxBytesPerRead="4096" 
                             maxDepth="32"
                             maxNameTableCharCount="16384"
                             maxStringContentLength="8192"/>
           </binding>>
        </wsHttpBinding>
     </bindings>
    

    这些设置会影响服务器上的DATACONTractSerialServer如何反序列化您的消息——您可以查阅MSDN文档中的详细信息,并根据需要设置这些值。

    马克