【问题标题】:How to upload files larger than 16k to a WCF-service?如何将大于 16k 的文件上传到 WCF 服务?
【发布时间】:2009-07-23 17:02:56
【问题描述】:

长话短说:

  • 制作网络应用程序

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

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

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

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

  • 在我的上传图片功能中,我可以上传最大 16k 的图片。没什么大不了的。

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

    李>

这是我得到的错误:

格式化程序抛出异常,而 试图反序列化消息: 尝试执行时出错 反序列化参数 http://www.mydomain.com/contracts/profile/2009/07:userProfile。 InnerException 消息是“那里 反序列化对象时出错 类型 Myproject.Commons.BusinessObjects.UserProfile。 最大数组长度配额 (16384) 读取 XML 时已超出 数据。此配额可能会增加 更改 MaxArrayLength 属性 在 XmlDictionaryReaderQuotas 创建 XML 时使用的对象 读者。第 1 行,位置 44978.'。 请参阅 InnerException 了解更多信息 详情。

它还告诉我错误的源文件是服务引用中的 Reference.cs。 ...现在我基本上无法理解这到底是从哪里来的。有人知道吗?

【问题讨论】:

    标签: asp.net-mvc wcf entity-framework upload


    【解决方案1】:

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

    最大数组长度配额(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>
    

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

    马克

    【讨论】:

    • 我在绑定中也将 readerQUotas 的 maxArrayLength 设置为 1048576。但是,我不知道wsHttpBinding 是什么。我的被​​称为basicHttpBinding 并且似乎包含与您写的基本相同的内容。
    • wsHttpBinding 只是 basicHttpBinding 更“符合标准”的版本——完全没有问题。该设置同样适用于 basicHttpBinding。
    • 啊,好吧。嗯,我把所有值都设置为1048576,没区别。
    • OK - 除了 maxBufferSize 和 maxReceivedMessageSize - 你还设置了 maxBufferPoolSize 吗?错误还是一样吗?
    • 我已将所有可能的值设置为 1048576:p 明天我回去工作时可以发布更多代码。
    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多